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 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