class Cyclical::Schedule
Attributes
end_time[RW]
start_time[R]
Public Class Methods
from_hash(hash)
click to toggle source
# File lib/cyclical/schedule.rb, line 102 def self.from_hash(hash) rule = hash.clone start_time = hash.delete(:start) end_time = hash.delete(:end) rule = hash[:freq] && hash[:interval] ? Rule.from_hash(hash) : nil s = Schedule.new start_time, rule s.end_time = end_time s end
from_json(json)
click to toggle source
# File lib/cyclical/schedule.rb, line 115 def self.from_json(json) h = JSON.parse(json) h['start'] = Time.parse(h['start']) if h['start'] h['end'] = Time.parse(h['end']) if h['end'] h['stop'] = Time.parse(h['stop']) if h['stop'] from_hash(h.symbolize_keys) end
new(start_time, rule = nil)
click to toggle source
# File lib/cyclical/schedule.rb, line 18 def initialize(start_time, rule = nil) @occurrence = Occurrence.new rule, start_time unless rule.nil? @start_time = @occurrence ? @occurrence.start_time : start_time end
Public Instance Methods
end_time=(time)
click to toggle source
# File lib/cyclical/schedule.rb, line 32 def end_time=(time) raise "End time is before start time" if time < @start_time @end_time = time @occurrence.duration = (time - start_time) unless @occurrence.nil? time end
first(n)
click to toggle source
query interface
# File lib/cyclical/schedule.rb, line 42 def first(n) return [start_time] if @occurrence.nil? @occurrence.next_occurrences(n, start_time) end
next_occurrence(time)
click to toggle source
first occurrence in [time, infinity)
# File lib/cyclical/schedule.rb, line 49 def next_occurrence(time) return (start_time < time ? nil : start_time) if @occurrence.nil? @occurrence.next_occurrence(time) end
occurrences(end_time = nil)
click to toggle source
# File lib/cyclical/schedule.rb, line 62 def occurrences(end_time = nil) raise ArgumentError, "You have to specify end time for an infinite schedule occurrence listing" if end_time.nil? && @occurrence && @occurrence.rule.infinite? if end_time occurrences_between(start_time, end_time) else return [start_time] if @occurrence.nil? @occurrence.all end end
occurrences_between(t1, t2)
click to toggle source
occurrences in [t1, t2)
# File lib/cyclical/schedule.rb, line 75 def occurrences_between(t1, t2) return ((start_time < t1 || @start_time >= t2) ? [] : [start_time]) if @occurrence.nil? @occurrence.occurrences_between(t1, t2) end
previous_occurrence(time)
click to toggle source
last occurrence in (-infinity, time)
# File lib/cyclical/schedule.rb, line 56 def previous_occurrence(time) return (start_time >= time ? nil : start_time) if @occurrence.nil? @occurrence.previous_occurrence(time) end
rule()
click to toggle source
# File lib/cyclical/schedule.rb, line 28 def rule @occurrence.nil? ? nil : @occurrence.rule end
rule=(rule)
click to toggle source
# File lib/cyclical/schedule.rb, line 23 def rule=(rule) @occurrence = (rule.nil? ? nil : Occurrence.new(rule, start_time)) @occurrence.duration = end_time ? (end_time - start_time) : 0 end
suboccurrences_between(t1, t2)
click to toggle source
# File lib/cyclical/schedule.rb, line 81 def suboccurrences_between(t1, t2) raise RuntimeError, "Schedule must have an end time to compute suboccurrences" unless end_time return [Suboccurrence.find(:occurrence => start_time..end_time, :interval => t1..t2)] if @occurrence.nil? @occurrence.suboccurrences_between(t1, t2) end
to_hash()
click to toggle source
# File lib/cyclical/schedule.rb, line 89 def to_hash hash = @occurrence.nil? ? {} : @occurrence.to_hash.clone hash[:start] = start_time hash[:end] = end_time if end_time hash end
to_json()
click to toggle source
# File lib/cyclical/schedule.rb, line 98 def to_json to_hash.to_json end