texel-recurrence-rule-parser 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/lib/rrule_parser.rb +28 -2
- metadata +3 -3
data/Rakefile
CHANGED
@@ -5,8 +5,8 @@ require 'hoe'
|
|
5
5
|
require './lib/rrule_parser.rb'
|
6
6
|
|
7
7
|
Hoe.new('RruleParser', RruleParser::VERSION) do |p|
|
8
|
-
|
9
|
-
|
8
|
+
p.rubyforge_name = 'RruleParserx' # if different than lowercase project name
|
9
|
+
p.developer('Leigh Caplan', 'texel1@gmail.com')
|
10
10
|
end
|
11
11
|
|
12
12
|
# vim: syntax=Ruby
|
data/lib/rrule_parser.rb
CHANGED
@@ -27,16 +27,19 @@ class RruleParser
|
|
27
27
|
|
28
28
|
def initialize(event)
|
29
29
|
@expressions = []
|
30
|
+
@count = 0
|
30
31
|
self.rules = {}
|
31
32
|
self.event = event
|
32
33
|
self.parse_rules(event)
|
34
|
+
parse_count
|
33
35
|
end
|
34
36
|
|
35
37
|
# Parse rules, output temporal expressions
|
36
|
-
def expressions
|
38
|
+
def expressions
|
37
39
|
@expressions = []
|
38
40
|
@expressions << parse_frequency_and_interval
|
39
41
|
@expressions << parse_byday
|
42
|
+
@expressions << parse_until
|
40
43
|
@expressions.compact!
|
41
44
|
@expressions
|
42
45
|
end
|
@@ -45,11 +48,23 @@ class RruleParser
|
|
45
48
|
self.expressions.inject {|m, v| v & m}
|
46
49
|
end
|
47
50
|
|
51
|
+
# Accepts a range of dates and outputs an array of dates matching the temporal expression.
|
52
|
+
def dates(range)
|
53
|
+
if @count <= 0
|
54
|
+
self.expression.dates(range)
|
55
|
+
else
|
56
|
+
temp_range = self.event.start.to_date..(range.last)
|
57
|
+
temp_dates = self.expression.dates(temp_range, @count)
|
58
|
+
temp_dates.select do |date|
|
59
|
+
range.include?(date)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
48
64
|
protected
|
49
65
|
|
50
66
|
def parse_rules(event)
|
51
67
|
rrules = event.recurrence_rules
|
52
|
-
|
53
68
|
rrules.each do |rule|
|
54
69
|
pairs = rule.split(";")
|
55
70
|
pairs.each do |pair|
|
@@ -74,6 +89,7 @@ class RruleParser
|
|
74
89
|
end
|
75
90
|
end
|
76
91
|
|
92
|
+
# Currently only supports days of the week (MO, TU, WED, etc.)
|
77
93
|
def parse_byday
|
78
94
|
if self.rules[:byday]
|
79
95
|
self.rules[:byday].map{ |day| Runt::DIWeek.new(RruleParser::DAYS[day]) }.inject do |m, expr|
|
@@ -81,4 +97,14 @@ class RruleParser
|
|
81
97
|
end
|
82
98
|
end
|
83
99
|
end
|
100
|
+
|
101
|
+
def parse_until
|
102
|
+
if self.rules[:until]
|
103
|
+
Runt::BeforeTE.new(Date.parse(self.rules[:until]))
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def parse_count
|
108
|
+
@count = self.rules[:count].to_i if self.rules[:count]
|
109
|
+
end
|
84
110
|
end
|
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.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leigh Caplan
|
@@ -13,13 +13,13 @@ date: 2008-12-10 00:00:00 -08:00
|
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name: runt
|
16
|
+
name: texel-runt
|
17
17
|
version_requirement:
|
18
18
|
version_requirements: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.7.
|
22
|
+
version: 0.7.1
|
23
23
|
version:
|
24
24
|
- !ruby/object:Gem::Dependency
|
25
25
|
name: icalendar
|