texel-recurrence-rule-parser 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -24,22 +24,29 @@ class RruleParser
24
24
 
25
25
  attr_accessor :event
26
26
  attr_accessor :rules, :exceptions
27
-
27
+
28
28
  def initialize(event)
29
+ self.event = event
30
+ self.setup
31
+ end
32
+
33
+ def setup
29
34
  @expressions = []
30
35
  @count = 0
31
36
  self.rules = {}
32
- self.event = event
33
37
  self.parse_rules
34
38
  self.parse_exceptions
35
39
  parse_count
40
+ self
36
41
  end
37
42
 
43
+ alias :reload :setup
44
+
38
45
  # Parse rules, output temporal expressions
39
46
  def expressions
40
47
  @expressions = []
41
48
  @expressions << parse_frequency_and_interval
42
- @expressions << send(:"parse_#{self.rules[:freq].downcase}")
49
+ @expressions << send(:"parse_#{self.rules[:freq].downcase}") if self.rules[:freq]
43
50
  @expressions << parse_start
44
51
  @expressions << parse_until
45
52
  @expressions.compact!
@@ -71,39 +78,52 @@ class RruleParser
71
78
  dates.flatten.uniq - self.exceptions
72
79
  end
73
80
 
74
- protected
75
-
76
- def parse_rules
77
- self.rules = {}
78
- rrules = self.event.recurrence_rules
81
+ def self.parse_rules(rrules)
82
+ rules = {}
83
+
79
84
  rrules.each do |rule|
80
85
  pairs = rule.split(";")
81
86
  pairs.each do |pair|
82
87
  array = pair.split('=')
83
- self.rules[array[0].downcase.to_sym] = array[1]
88
+ rules[array[0].downcase.to_sym] = array[1]
84
89
  end
85
90
  end
86
-
91
+
87
92
  # Parse comma separated lists.
88
- self.rules.each do |key, rule|
93
+ rules.each do |key, rule|
89
94
  if rule =~ /,/
90
95
  rules[key] = rule.split(',')
91
96
  end
92
97
  end
93
-
98
+
94
99
  # Override rules to_s
95
- self.rules.instance_eval do
100
+ rules.instance_eval do
96
101
  def to_s
97
102
  self.map do |key, value|
98
103
  "#{key.to_s.upcase}=#{value.map.join(',')}"
99
104
  end.join(";")
100
105
  end
101
106
  end
107
+
108
+ rules
109
+ end
110
+
111
+ protected
112
+
113
+ def parse_rules
114
+ self.rules = RruleParser.parse_rules(self.event.recurrence_rules)
102
115
  end
103
116
 
104
117
  def parse_exceptions
105
- self.exceptions = self.event.exception_dates.map do |exception_date|
106
- Date.parse(exception_date)
118
+ # Exception dates are a bit of a misnomer. They should be stored
119
+ # as Times instead. Right now we are going to assume all exdates
120
+ # are stored as UTC. We can support time zone conversion later.
121
+ self.exceptions = self.event.exception_dates.map do |exception_time|
122
+ if exception_time.is_a?(Time)
123
+ exception_time
124
+ else
125
+ Time.parse(exception_time)
126
+ end
107
127
  end
108
128
  end
109
129
 
@@ -162,21 +162,6 @@ describe RruleParser do
162
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
180
165
  end
181
166
 
182
167
  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.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leigh Caplan