Class: Runt::Schedule
- Inherits:
-
Object
- Object
- Runt::Schedule
- Defined in:
- lib/runt/schedule.rb
Overview
Implementation of a pattern
[http://martinfowler.com/apsupp/recurring.pdf] for recurring calendar events created by Martin Fowler.
Instance Method Summary collapse
-
#add(event, expression) ⇒ Object
Schedule event to occur using the given expression.
-
#dates(event, date_range) ⇒ Object
For the given date range, returns an Array of PDate objects at which the supplied event is scheduled to occur.
-
#events(date) ⇒ Object
Returns all Events whose Temporal Expression includes the given date/expression.
-
#include?(event, date) ⇒ Boolean
Return true or false depend on if the supplied event is scheduled to occur on the given date.
-
#initialize ⇒ Schedule
constructor
A new instance of Schedule.
-
#select(&block) ⇒ Object
Selects events using the user supplied block/Proc.
-
#update(event, &block) ⇒ Object
Call the supplied block/Proc with the currently configured TemporalExpression associated with the supplied Event.
Constructor Details
#initialize ⇒ Schedule
Returns a new instance of Schedule.
10 11 12 13 |
# File 'lib/runt/schedule.rb', line 10 def initialize @elems = Hash.new self end |
Instance Method Details
#add(event, expression) ⇒ Object
Schedule event to occur using the given expression.
NOTE: version 0.5.0 no longer uses an Array of ScheduleElements
internally to hold data. This would only matter to clients if they
they depended on the ability to call add multiple times for the same
event. Use the update method instead.
20 21 22 |
# File 'lib/runt/schedule.rb', line 20 def add(event, expression) @elems[event]=expression end |
#dates(event, date_range) ⇒ Object
For the given date range, returns an Array of PDate objects at which the supplied event is scheduled to occur.
26 27 28 29 30 31 32 |
# File 'lib/runt/schedule.rb', line 26 def dates(event, date_range) result=[] date_range.each do |date| result.push date if include?(event,date) end result end |
#events(date) ⇒ Object
Returns all Events whose Temporal Expression includes the given date/expression
44 45 46 |
# File 'lib/runt/schedule.rb', line 44 def events(date) self.select{|ev,xpr| xpr.include?(date);} end |
#include?(event, date) ⇒ Boolean
Return true or false depend on if the supplied event is scheduled to occur on the given date.
36 37 38 39 |
# File 'lib/runt/schedule.rb', line 36 def include?(event, date) return false unless @elems.include?(event) return 0<(self.select{|ev,xpr| ev.eql?(event)&&xpr.include?(date);}).size end |
#select(&block) ⇒ Object
Selects events using the user supplied block/Proc. The Proc must accept two parameters: an Event and a TemporalExpression. It will be called with each existing Event-expression pair at which point it can choose to include the Event in the final result by returning true or to filter it by returning false.
55 56 57 58 59 |
# File 'lib/runt/schedule.rb', line 55 def select(&block) result=[] @elems.each_pair{|event,xpr| result.push(event) if block.call(event,xpr);} result end |
#update(event, &block) ⇒ Object
Call the supplied block/Proc with the currently configured TemporalExpression associated with the supplied Event.
65 66 67 |
# File 'lib/runt/schedule.rb', line 65 def update(event,&block) block.call(@elems[event]) end |