class Tally::Archiver

Public Class Methods

archive!(*args) click to toggle source
# File lib/tally/archiver.rb, line 36
def self.archive!(*args)
  new(*args).archive!
end
new(key: nil, day: nil, record: nil, type: nil) click to toggle source
# File lib/tally/archiver.rb, line 4
def initialize(key: nil, day: nil, record: nil, type: nil)
  @key = key
  @day = day
  @record = record
  @type = type
end

Public Instance Methods

archive!() click to toggle source
# File lib/tally/archiver.rb, line 11
def archive!
  remove_existing_records

  finder.entries.each do |entry|
    next if entry.type.present? && !entry.record

    record = if entry.record
      Record.find_or_initialize_by(day: entry.date, key: entry.key, recordable: entry.record)
    else
      Record.find_or_initialize_by(day: entry.date, key: entry.key, recordable: nil)
    end

    record.value = entry.value
    record.save
  end

  enqueue_registered_calculators

  true
end
day() click to toggle source
# File lib/tally/archiver.rb, line 32
def day
  @day ||= Time.current.utc.to_date
end

Private Instance Methods

enqueue_registered_calculators() click to toggle source
# File lib/tally/archiver.rb, line 42
def enqueue_registered_calculators
  day_str = day.strftime("%Y-%m-%d")
  calculate_method = Tally.config.perform_calculators == :now ? :perform_now : :perform_later

  Tally.calculators.each do |class_name|
    CalculatorRunnerJob.public_send(calculate_method, class_name, day_str)
  end
end
finder() click to toggle source
# File lib/tally/archiver.rb, line 51
def finder
  @finder ||= Daily.new(key: @key, day: @day, record: @record, type: @type)
end
remove_existing_records() click to toggle source
# File lib/tally/archiver.rb, line 55
def remove_existing_records
  return if @key.present?
  return if @record.present?
  return if @type.present?

  Record.where(day: day).delete_all
end