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.
Files changed (3) hide show
  1. data/Rakefile +2 -2
  2. data/lib/rrule_parser.rb +28 -2
  3. 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
- # p.rubyforge_name = 'RruleParserx' # if different than lowercase project name
9
- # p.developer('FIX', 'FIX@example.com')
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.2
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.0
22
+ version: 0.7.1
23
23
  version:
24
24
  - !ruby/object:Gem::Dependency
25
25
  name: icalendar