Module: EventMachine

Defined in:
lib/em-timers/em-timers.rb

Class Method Summary collapse

Class Method Details

.do(options = {}, &blk) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/em-timers/em-timers.rb', line 3

def self.do(options={}, &blk)
  increment = options[:every]
  starting = options[:starting]

  reschedule = proc {|inc, block| EM.add_timer(inc) { reschedule.call(inc, block) } ; block.call }

  if starting == :now
    EM.add_timer(increment) { reschedule.call(increment, blk) }
    blk.call
    return nil
  else
    if starting.is_a?(String)
      starting = Object.const_defined?("Chronic") ? Chronic.parse(starting) : Time.parse(starting)
    elsif starting.is_a?(Time) || starting.kind_of?(Numeric)
      starting = starting
    else
      starting = Time.now
    end
  end

  if starting.is_a?(Time)
    time = starting - Time.now
  else
    time = starting
  end

  while time < 0
    time += increment
  end

  EM.add_timer(time) { reschedule.call(increment, blk) }

  return nil
end

.do_daily(options = {}, &blk) ⇒ Object



42
43
44
# File 'lib/em-timers/em-timers.rb', line 42

def self.do_daily(options={}, &blk)
  self.do({:every => 1.day}.merge(options), &blk)
end

.do_hourly(options = {}, &blk) ⇒ Object



38
39
40
# File 'lib/em-timers/em-timers.rb', line 38

def self.do_hourly(options={}, &blk)
  self.do({:every => 1.hour}.merge(options), &blk)
end

.do_monthly(options = {}, &blk) ⇒ Object



50
51
52
# File 'lib/em-timers/em-timers.rb', line 50

def self.do_monthly(options={}, &blk)
  self.do({:every => 1.month}.merge(options), &blk)
end

.do_weekly(options = {}, &blk) ⇒ Object



46
47
48
# File 'lib/em-timers/em-timers.rb', line 46

def self.do_weekly(options={}, &blk)
  self.do({:every => 1.week}.merge(options), &blk)
end