class Docket::Repeater

Attributes

frequencies[RW]
perform_action[RW]
perform_on[RW]
repeat[R]
scheduler[RW]
scheduler_action[RW]
scheduler_set_callback[RW]
storage[R]

Public Class Methods

new(args={}) click to toggle source
# File lib/docket/repeater.rb, line 10
def initialize args={}
  @frequencies            = args[:frequencies]
  @perform_action         = args[:perform_action]
  @perform_on             = args[:perform_on]
  @scheduler              = args[:scheduler] || Rufus::Scheduler.new
  @scheduler_action       = args[:scheduler_action]
  @scheduler_set_callback = args[:scheduler_set_callback] || lambda {|scheduler|}
  @storage                = args[:storage] || Docket.configuration.storage || Docket::Storage::Daybreak.new('/tmp/docket.rb')
  @repeat                 = args[:repeat]
end

Public Instance Methods

items_for(frequency) click to toggle source
# File lib/docket/repeater.rb, line 25
def items_for frequency
  Array(storage.read(frequency))
end
repeated_items() click to toggle source
# File lib/docket/repeater.rb, line 21
def repeated_items
  frequencies.collect { |frequency| items_for frequency }.compact.flatten
end
set() click to toggle source
# File lib/docket/repeater.rb, line 29
def set
  frequencies.each do |frequency|
    if scheduler_action
      scheduler_action.call(self, frequency)
    else
      scheduler.every(frequency, :times => repeat) do
        items_for(frequency).each { |key| perform_on.perform(key, perform_action) }
      end
    end

  end

  scheduler_set_callback.call(scheduler)
end
stop(force=false) click to toggle source
# File lib/docket/repeater.rb, line 44
def stop force=false
  if force
    scheduler.shutdown(:kill)
  else
    scheduler.shutdown(:wait)
  end
end