class ChronoTrigger::Event

Attributes

after[R]
args[R]
at[RW]
before[R]
every[R]
id[R]
purge[R]
repeats[RW]
scope[R]

Public Class Methods

after(value) click to toggle source
# File lib/chrono_trigger/event.rb, line 55
def after(value)
  return self unless value
  value = Time.zone.parse(value) if value.is_a?(String)
  @after = moment_in_the_future(value) if value.is_a?(ActiveSupport::TimeWithZone)
  self
end
at(value) click to toggle source
# File lib/chrono_trigger/event.rb, line 41
def at(value)
  return self unless value
  value = Time.zone.parse(value) if value.is_a?(String)
  @at = moment_in_the_future(value) if value.is_a?(ActiveSupport::TimeWithZone)
  self
end
before(value) click to toggle source
# File lib/chrono_trigger/event.rb, line 48
def before(value)
  return self unless value
  value = Time.zone.parse(value) if value.is_a?(String)
  @before = moment_in_the_future(value) if value.is_a?(ActiveSupport::TimeWithZone)
  self
end
every(value) click to toggle source
# File lib/chrono_trigger/event.rb, line 34
def every(value)
  return self unless value
  @every = value if value.is_a?(ActiveSupport::Duration)
  @every = value.seconds if value.is_a?(Integer)
  self
end
new(options, args) click to toggle source
# File lib/chrono_trigger/event.rb, line 70
def initialize(options, args)
  @id = options.id
  @scope = options.scope
  @repeats = options.repeats
  @every = options.every
  @at = options.at
  @before = options.before
  @after = options.after
  @args = args
  @purge = false
  ChronoTrigger.schedule.add(self)
end
repeats(value) click to toggle source
# File lib/chrono_trigger/event.rb, line 27
def repeats(value)
  return self unless value
  @repeats = value.count if value.is_a?(Enumerator)
  @repeats = value if value.is_a?(Integer) || value == :forever
  self
end
schedule(*args) click to toggle source
# File lib/chrono_trigger/event.rb, line 6
def schedule(*args)
  id = SecureRandom.uuid
  options = OpenStruct.new(
    id: id,
    scope: @scope,
    repeats: @repeats || 1,
    every: @every || 1.second,
    at: @at,
    before: @before,
    after: @after
  )
  new(options, args)
end
scope(value) click to toggle source
# File lib/chrono_trigger/event.rb, line 20
def scope(value)
  return self unless value
  @scope = value if value.is_a?(String)
  @scope = value.to_gid.to_s if value.is_a?(ActiveRecord::Base)
  self
end

Public Instance Methods

purge!() click to toggle source
# File lib/chrono_trigger/event.rb, line 87
def purge!
  @purge = true
end
ticks() click to toggle source
# File lib/chrono_trigger/event.rb, line 83
def ticks
  ChronoTrigger::Clock.ticks
end
to_s() click to toggle source
# File lib/chrono_trigger/event.rb, line 94
def to_s
  inspect
end

Private Instance Methods

perform(args) click to toggle source
# File lib/chrono_trigger/event.rb, line 100
def perform(args)
  raise NotImplementedError
end