Sha256: fd331d3887519e5a4e5c65c941d7147d1df81d7881d6cef08726079d7274d9c3

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

require 'say_when/storage/memory/base'

module SayWhen
  module Store
    module Memory

      # define a trigger class
      class Job

        cattr_accessor :jobs
        @@jobs = SortedSet.new

        include SayWhen::Storage::Memory::Base
      	include SayWhen::BaseJob

        has_properties :group, :name, :status, :start_at, :end_at
        has_properties :trigger_strategy, :trigger_options, :last_fire_at, :next_fire_at
        has_properties :job_class, :job_method, :data
        has_properties :scheduled

        def self.acquire_next(no_later_than)
          self.lock.synchronize {
            
            next_job = jobs.detect(nil) do |j|
              (j.status == STATE_WAITING) && (j.next_fire_at.to_i <= no_later_than.to_i)
            end

            next_job.status = STATE_ACQUIRED if next_job
            next_job
          }          
        end

        def initialize(options={})
          super
          self.status = STATE_WAITING unless self.status          
          self.next_fire_at = self.trigger.next_fire_at(Time.now)
          self.class.jobs << self
        end

        def <=>(job)
          self.next_fire_at.to_i <=> job.next_fire_at.to_i
        end

      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
say_when-0.1.0 lib/say_when/storage/memory/job.rb