Sha256: 15ecedb473056be37346b97d30caf5d312f83df5cc220146435d2a46cc9efa33

Contents?: true

Size: 1023 Bytes

Versions: 1

Compression:

Stored size: 1023 Bytes

Contents

module Crono
  class Job
    include Logging

    attr_accessor :performer
    attr_accessor :period
    attr_accessor :last_performed_at

    def initialize(performer, period)
      self.performer, self.period = performer, period
    end

    def next
      next_time = period.next(since: last_performed_at)
      next_time.past? ? period.next : next_time
    end

    def description
      "Perform #{performer} #{period.description}"
    end

    def job_id
      description
    end

    def perform
      logger.info "Perform #{performer}"
      self.last_performed_at = Time.now
      save
      Thread.new do
        performer.new.perform
        logger.info "Finished #{performer} in %.2f seconds" % (Time.now - last_performed_at)
      end
    end

    def save
      model.update(last_performed_at: last_performed_at)
    end

    def load
      self.last_performed_at = model.last_performed_at
    end

  private
    def model
      @model ||= Crono::CronoJob.find_or_create_by(job_id: job_id)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
crono-0.6.1 lib/crono/job.rb