docbrown/app/models/data_update_script.rb

35 lines
909 B
Ruby

class DataUpdateScript < ApplicationRecord
DIRECTORY = Rails.root.join("lib/data_update_scripts").freeze
NAMESPACE = "DataUpdateScripts".freeze
STATUSES = { enqueued: 0, working: 1, succeeded: 2, failed: 3 }.freeze
enum status: STATUSES
validates :file_name, uniqueness: true
def self.filenames
Dir.glob("*.rb", base: DIRECTORY).map { |f| Pathname.new(f).basename(".rb").to_s }
end
def self.load_script_ids
filenames.
map { |file_name| find_or_create_by(file_name: file_name) }.
select(&:enqueued?).
map(&:id)
end
def mark_as_run!
update!(run_at: Time.now.utc, status: :working)
end
def mark_as_finished!
update!(finished_at: Time.now.utc, status: :succeeded)
end
def mark_as_failed!
update!(finished_at: Time.now.utc, status: :failed)
end
def file_class
"#{self.class::NAMESPACE}::#{file_name.camelcase}".constantize
end
end