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 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(event)
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
- # TODO put original date back in if recurrence rule doesn't define it.
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
- dates.flatten.uniq
70
+
71
+ dates.flatten.uniq - self.exceptions
70
72
  end
71
73
 
72
74
  protected
73
75
 
74
- def parse_rules(event)
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 31 dates" do
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: texel-recurrence-rule-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leigh Caplan