ice_cube 0.6.4 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/ice_cube/schedule.rb +21 -20
- data/lib/ice_cube/version.rb +1 -1
- metadata +4 -4
data/lib/ice_cube/schedule.rb
CHANGED
@@ -6,7 +6,7 @@ module IceCube
|
|
6
6
|
|
7
7
|
alias :end_date :end_time
|
8
8
|
alias :start_time :start_date
|
9
|
-
|
9
|
+
|
10
10
|
def initialize(start_date, options = {})
|
11
11
|
@rrule_occurrence_heads = []
|
12
12
|
@exrule_occurrence_heads = []
|
@@ -43,11 +43,12 @@ module IceCube
|
|
43
43
|
end
|
44
44
|
|
45
45
|
# Create a schedule from a hash created by instance.to_hash
|
46
|
-
def self.from_hash(hash)
|
46
|
+
def self.from_hash(hash, hash_options = {})
|
47
47
|
options = {}
|
48
48
|
options[:duration] = hash[:duration] if hash.has_key?(:duration)
|
49
49
|
options[:end_time] = TimeUtil.deserialize_time(hash[:end_time]) if hash.has_key?(:end_time)
|
50
|
-
|
50
|
+
start_date = hash_options[:start_date_override] || TimeUtil.deserialize_time(hash[:start_date])
|
51
|
+
schedule = Schedule.new(start_date, options)
|
51
52
|
hash[:rrules].each { |rr| schedule.add_recurrence_rule Rule.from_hash(rr) }
|
52
53
|
hash[:exrules].each { |ex| schedule.add_exception_rule Rule.from_hash(ex) }
|
53
54
|
hash[:rdates].each { |rd| schedule.add_recurrence_date TimeUtil.deserialize_time(rd) }
|
@@ -56,14 +57,14 @@ module IceCube
|
|
56
57
|
end
|
57
58
|
|
58
59
|
# Create a schedule from a yaml string created by instance.to_yaml
|
59
|
-
def self.from_yaml(str)
|
60
|
-
from_hash(YAML::load(str))
|
60
|
+
def self.from_yaml(str, hash_options = {})
|
61
|
+
from_hash(YAML::load(str), hash_options)
|
61
62
|
end
|
62
63
|
|
63
64
|
TIME_FORMAT = '%B %e, %Y'
|
64
65
|
SEPARATOR = ' / '
|
65
66
|
NEWLINE = "\n"
|
66
|
-
|
67
|
+
|
67
68
|
# use with caution
|
68
69
|
# incomplete and not entirely tested - no time representation in dates
|
69
70
|
# there's a lot that can happen here
|
@@ -87,9 +88,9 @@ module IceCube
|
|
87
88
|
representation_pieces.concat @rrule_occurrence_heads.map { |r| "RRULE:#{r.rule.to_ical}" } if @rrule_occurrence_heads
|
88
89
|
representation_pieces.concat @exrule_occurrence_heads.map { |r| "EXRULE:#{r.rule.to_ical}" } if @exrule_occurrence_heads
|
89
90
|
representation_pieces << "DTEND#{TimeUtil.ical_format(@end_time)}" if @end_time
|
90
|
-
representation_pieces.join(NEWLINE)
|
91
|
+
representation_pieces.join(NEWLINE)
|
91
92
|
end
|
92
|
-
|
93
|
+
|
93
94
|
def occurring_at?(time)
|
94
95
|
return false if @exdates.include?(time)
|
95
96
|
return true if @rdates.include?(time)
|
@@ -103,7 +104,7 @@ module IceCube
|
|
103
104
|
dates = occurrences(date)
|
104
105
|
dates.last == date
|
105
106
|
end
|
106
|
-
|
107
|
+
|
107
108
|
# Determine whether a given date appears in the times returned by the schedule
|
108
109
|
def occurs_on?(date)
|
109
110
|
if defined?(ActiveSupport::TimeWithZone) && @start_date.is_a?(ActiveSupport::TimeWithZone)
|
@@ -113,14 +114,14 @@ module IceCube
|
|
113
114
|
time_format = @start_date.utc? ? :utc : :local
|
114
115
|
self.occurrences_between(Time.send(time_format, date.year, date.month, date.day, 0, 0, 0), Time.send(time_format, date.year, date.month, date.day, 23, 59, 59)).any?
|
115
116
|
end
|
116
|
-
|
117
|
-
# Return all possible occurrences
|
117
|
+
|
118
|
+
# Return all possible occurrences
|
118
119
|
# In order to make this call, all rules in the schedule must have
|
119
120
|
# either an until date or an occurrence count
|
120
121
|
def all_occurrences
|
121
122
|
find_occurrences { |head| head.all_occurrences }
|
122
123
|
end
|
123
|
-
|
124
|
+
|
124
125
|
# Find all occurrences until a certain date
|
125
126
|
def occurrences(end_date)
|
126
127
|
end_date = @end_time if @end_time && @end_time < end_date
|
@@ -132,7 +133,7 @@ module IceCube
|
|
132
133
|
raise ArgumentError.new('Schedule must have an end_time to use remaining_occurrences') unless @end_time
|
133
134
|
occurrences_between(from, @end_time)
|
134
135
|
end
|
135
|
-
|
136
|
+
|
136
137
|
# Find next scheduled occurrence
|
137
138
|
def next_occurrence(from = Time.now)
|
138
139
|
next_occurrences(1, from).first
|
@@ -168,7 +169,7 @@ module IceCube
|
|
168
169
|
@exrule_occurrence_heads << RuleOccurrence.new(rule, @start_date, @end_time)
|
169
170
|
end
|
170
171
|
|
171
|
-
def exrules
|
172
|
+
def exrules
|
172
173
|
@exrule_occurrence_heads.map { |h| h.rule }
|
173
174
|
end
|
174
175
|
|
@@ -180,7 +181,7 @@ module IceCube
|
|
180
181
|
# Add an individual date exception to this schedule
|
181
182
|
def add_exception_date(date)
|
182
183
|
@exdates << date unless date.nil?
|
183
|
-
end
|
184
|
+
end
|
184
185
|
|
185
186
|
def occurrences_between(begin_time, end_time)
|
186
187
|
# adjust to the propert end date
|
@@ -203,16 +204,16 @@ module IceCube
|
|
203
204
|
alias exdate add_exception_date
|
204
205
|
alias exrule add_exception_rule
|
205
206
|
|
206
|
-
|
207
|
+
|
207
208
|
private
|
208
|
-
|
209
|
+
|
209
210
|
# We know that start_date is a time with zone - so check referencing
|
210
211
|
# The date in that time zone
|
211
212
|
def active_support_occurs_on?(date)
|
212
213
|
time = Time.zone.parse(date.to_s) # date.to_time.in_time_zone(@start_date.time_zone)
|
213
214
|
occurrences_between(time.beginning_of_day, time.end_of_day).any?
|
214
215
|
end
|
215
|
-
|
216
|
+
|
216
217
|
# tell if, from a list of rule_occurrence heads, a certain time is occurring
|
217
218
|
def any_occurring_at?(what, time)
|
218
219
|
return false if @start_time && time < @start_time
|
@@ -224,7 +225,7 @@ module IceCube
|
|
224
225
|
end
|
225
226
|
end
|
226
227
|
end
|
227
|
-
|
228
|
+
|
228
229
|
# Find all occurrences (following rules and exceptions) from the schedule's start date to end_date.
|
229
230
|
# Use custom methods to say when to end
|
230
231
|
def find_occurrences
|
@@ -241,7 +242,7 @@ module IceCube
|
|
241
242
|
include_dates.reject! { |date| exclude_dates.include?(date) }
|
242
243
|
include_dates.to_a
|
243
244
|
end
|
244
|
-
|
245
|
+
|
245
246
|
end
|
246
247
|
|
247
248
|
end
|
data/lib/ice_cube/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ice_cube
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 5
|
10
|
+
version: 0.6.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- John Crepezzi
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-05 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|