texel-recurrence-rule-parser 0.0.6 → 0.0.7
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/rrule_parser.rb +14 -6
- data/spec/lib/rrule_parser_spec.rb +16 -1
- metadata +1 -1
data/lib/rrule_parser.rb
CHANGED
@@ -23,14 +23,15 @@ class RruleParser
|
|
23
23
|
}
|
24
24
|
|
25
25
|
attr_accessor :event
|
26
|
-
attr_accessor :rules
|
26
|
+
attr_accessor :rules, :exceptions
|
27
27
|
|
28
28
|
def initialize(event)
|
29
29
|
@expressions = []
|
30
30
|
@count = 0
|
31
31
|
self.rules = {}
|
32
32
|
self.event = event
|
33
|
-
self.parse_rules
|
33
|
+
self.parse_rules
|
34
|
+
self.parse_exceptions
|
34
35
|
parse_count
|
35
36
|
end
|
36
37
|
|
@@ -63,17 +64,18 @@ class RruleParser
|
|
63
64
|
end
|
64
65
|
end
|
65
66
|
|
66
|
-
#
|
67
|
+
# Put original date back in if recurrence rule doesn't define it.
|
67
68
|
start_date = self.event.start.send(:to_date)
|
68
69
|
dates << start_date if range.include?(start_date)
|
69
|
-
|
70
|
+
|
71
|
+
dates.flatten.uniq - self.exceptions
|
70
72
|
end
|
71
73
|
|
72
74
|
protected
|
73
75
|
|
74
|
-
def parse_rules
|
76
|
+
def parse_rules
|
75
77
|
self.rules = {}
|
76
|
-
rrules = event.recurrence_rules
|
78
|
+
rrules = self.event.recurrence_rules
|
77
79
|
rrules.each do |rule|
|
78
80
|
pairs = rule.split(";")
|
79
81
|
pairs.each do |pair|
|
@@ -99,6 +101,12 @@ class RruleParser
|
|
99
101
|
end
|
100
102
|
end
|
101
103
|
|
104
|
+
def parse_exceptions
|
105
|
+
self.exceptions = self.event.exception_dates.map do |exception_date|
|
106
|
+
Date.parse(exception_date)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
102
110
|
def parse_start
|
103
111
|
start_date = Date.civil(self.event.start.year, self.event.start.month, self.event.start.day) - 1
|
104
112
|
Runt::AfterTE.new(start_date)
|
@@ -159,9 +159,24 @@ describe RruleParser do
|
|
159
159
|
create_parser(@event)
|
160
160
|
end
|
161
161
|
|
162
|
-
it "should return
|
162
|
+
it "should return 32 dates" do
|
163
163
|
@parser.dates(@range).size.should == 32
|
164
164
|
end
|
165
|
+
|
166
|
+
context "with an exception on 12/5/2008" do
|
167
|
+
before(:each) do
|
168
|
+
@event.exception_dates = ['EXDATE;TZID=US/Pacific:20081205T150000']
|
169
|
+
create_parser(@event)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should return 31 dates" do
|
173
|
+
@parser.dates(@range).size.should == 31
|
174
|
+
end
|
175
|
+
|
176
|
+
it "should not return a date on 12/5/2008" do
|
177
|
+
@parser.dates(@range).should_not include(Date.parse('12/5/2008'))
|
178
|
+
end
|
179
|
+
end
|
165
180
|
end
|
166
181
|
|
167
182
|
context "recurring every 2 days" do
|