Class: UV::Repeat

Inherits:
ScheduledEvent show all
Defined in:
lib/uv-rays/scheduler.rb

Instance Attribute Summary

Attributes inherited from ScheduledEvent

#created, #last_scheduled, #next_scheduled, #trigger_count

Instance Method Summary collapse

Methods inherited from ScheduledEvent

#<=>, #cancel, #inspect

Constructor Details

#initialize(scheduler, every) ⇒ Repeat

Returns a new instance of Repeat.



89
90
91
92
93
94
# File 'lib/uv-rays/scheduler.rb', line 89

def initialize(scheduler, every)
    super(scheduler)

    @every = every
    next_time
end

Instance Method Details

#pauseObject

removes the event from the schedule



108
109
110
111
# File 'lib/uv-rays/scheduler.rb', line 108

def pause
    @paused = true
    @scheduler.unschedule(self)
end

#resumeObject

reschedules the event to the next time period can be used to reset a repeating timer



115
116
117
118
119
# File 'lib/uv-rays/scheduler.rb', line 115

def resume
    @paused = false
    @last_scheduled = @loop.now
    reschedule
end

#triggerObject

Runs the event and reschedules



122
123
124
125
126
127
128
129
# File 'lib/uv-rays/scheduler.rb', line 122

def trigger
    super()
    @loop.next_tick do
        # Do this next tick to avoid needless scheduling
        # if the event is stopped in the callback
        reschedule
    end
end

#update(every) ⇒ Object

Update the time period of the repeating event

Parameters:

  • schedule (String)

    a standard CRON job line or a human readable string representing a time period.

Raises:

  • (ArgumentError)


99
100
101
102
103
104
105
# File 'lib/uv-rays/scheduler.rb', line 99

def update(every)
    time = Scheduler.parse_in(every, :quiet) || Scheduler.parse_cron(every, :quiet)
    raise ArgumentError.new("couldn't parse \"#{o}\"") if time.nil?

    @every = time
    reschedule
end