texel-recurrence-rule-parser 0.0.2 → 0.0.3

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