texel-recurrence-rule-parser 0.0.7 → 0.0.8

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