texel-recurrence-rule-parser 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|