eventual 0.5.5 → 0.5.6

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.
data/README.rdoc CHANGED
@@ -56,57 +56,63 @@ Ejemplos:
56
56
  Eventual.parse( 'del 5 al 7 de junio del 2007 a las 16:00' ).include? Date.civil(2007, 6, 6)
57
57
  => true
58
58
 
59
- # El evento tiene una duración por omisión de 60 minutos
60
- Eventual.parse( 'del 5 al 7 de junio del 2007 a las 16:00' ).include? DateTime.civil(2007, 6, 6, 16, 59)
61
- => true
59
+ # Se puede pasar un rango de horas y se obtendrá un rango
60
+ Eventual.parse('1 de enero del 2010 de las 15:00 a las 16:00')
61
+ => [(DateTime.civil 2010, 1, 1, 15)..(DateTime.civil 2010, 1, 1, 16)]
62
62
 
63
- Eventual.parse( 'del 5 al 7 de junio del 2007 a las 16:00' ).include? DateTime.civil(2007, 6, 6, 17, 00)
64
- => false
63
+ Eventual.parse('1 de enero del 2010 de las 15:00 a las 16:00 y de las 17:00 a las 19:00')
65
64
 
66
- # Pero se puede cambiar
67
- dates = Eventual.parse( 'del 5 al 7 de junio del 2007 a las 16:00', :default_event_span => 120)
68
- dates.include? DateTime.civil(2007, 6, 6, 17, 00)
69
- => true
70
65
 
71
66
  Ejemplos de formatos reconocidos:
72
67
 
73
- * marzo
74
- * marzo de 2009
75
- * marzo del 2009
76
- * todo marzo 2009
77
- * marzo, 2009
78
- * marzo '09
79
- * lunes y martes marzo del 2010
80
- * todos los lunes y martes de marzo del 2010
81
- * lunes y martes durante marzo del 2010
82
- * lunes y martes durante todo marzo del 2010
83
- * lunes y martes, marzo del 2010
84
- * 21 de marzo
85
- * 21 marzo
86
- * domingo 21 de marzo
87
- * domingo, 21 de marzo
88
- * 1, 2 y 3 de marzo
89
- * 1, 2 y 3 marzo
90
- * lunes 1, martes 2 y miercoles 3 de marzo
91
- * 1 al 3 de marzo
92
- * 1 al 3, marzo
93
- * del 1 al 3 de marzo
94
- * del 1 al 3, marzo
95
- * 24 de febrero al 3 de marzo del 2010
96
- * 24 de diciembre del 2009 al 3 de enero del 2010
97
- * lunes y martes del 1 al 22 de marzo del '10
98
- * fines de semana del 1 al 22 de marzo del '10
99
- * entre semana del 1 al 22 de marzo del '10
100
- * lunes y martes del 1 al 22 de marzo del '10
101
- * todos los lunes y martes del 1 al 22 de marzo del '10
102
- * los lunes y martes del 1 al 22 de marzo del '10
103
- * los lunes y los martes del 1 al 22 de marzo del '10
104
- * lunes y martes de diciembre a las 15
105
- * lunes y martes, de diciembre a las 15
106
- * lunes y martes de diciembre a las 15:30 hrs.
107
- * lunes y martes de diciembre a las 15:00 y 16:00 horas
108
- * lunes y martes de diciembre a las 3 am
109
- * lunes y martes de diciembre a las 3:15 p.m.
68
+ - Por mes
69
+ * marzo
70
+ * marzo de 2009
71
+ * marzo del 2009
72
+ * todo marzo 2009
73
+ * marzo, 2009
74
+ * marzo '09
75
+ - Lista de dias
76
+ * lunes y martes marzo del 2010
77
+ * todos los lunes y martes de marzo del 2010
78
+ * lunes y martes durante marzo del 2010
79
+ * lunes y martes durante todo marzo del 2010
80
+ * lunes y martes, marzo del 2010
81
+ * 21 de marzo
82
+ * 21 marzo
83
+ * domingo 21 de marzo
84
+ * domingo, 21 de marzo
85
+ * 1, 2 y 3 de marzo
86
+ * 1, 2 y 3 marzo
87
+ * lunes 1, martes 2 y miercoles 3 de marzo
88
+ * 1 al 3 de marzo
89
+ * 1 al 3, marzo
90
+ * del 1 al 3 de marzo
91
+ * del 1 al 3, marzo
92
+ - Rango de fechas
93
+ * 24 de febrero al 3 de marzo del 2010
94
+ * 24 de diciembre del 2009 al 3 de enero del 2010
95
+ * lunes y martes del 1 al 22 de marzo del '10
96
+ * fines de semana del 1 al 22 de marzo del '10
97
+ * entre semana del 1 al 22 de marzo del '10
98
+ * lunes y martes del 1 al 22 de marzo del '10
99
+ * todos los lunes y martes del 1 al 22 de marzo del '10
100
+ * los lunes y martes del 1 al 22 de marzo del '10
101
+ * los lunes y los martes del 1 al 22 de marzo del '10
102
+ - Con horario (se puede aplicar a todos los casos)
103
+ * lunes y martes de diciembre a las 15
104
+ * lunes y martes, de diciembre a las 15
105
+ * lunes y martes de diciembre a las 15:30 hrs.
106
+ * lunes y martes de diciembre a las 15:00 y 16:00 horas
107
+ * lunes y martes de diciembre a las 15:00 y 16:00 horas
108
+ * lunes y martes de diciembre a las 3 am
109
+ * lunes y martes de diciembre a las 3:15 p.m.
110
+ - Con rango de horario (se puede aplicar a todos los casos)
111
+ * 1 de enero del 2010 de las 15:00 a las 16:00
112
+ * 1 de enero del 2010 de las 15:00 a las 16:00 y de las 17:00 a las 19:00
113
+ * 1 de enero del 2010 de las 15:00 a las 16:00, de las 17:00 a las 19:00 y de las 21:00 a las 22:00
114
+ - Fechas compuestas
115
+ * 1 de enero y lunes y martes del 1 de octubre al 2 de diciembre del 2008
110
116
 
111
117
  == TODO:
112
118
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.5
1
+ 0.5.6
data/lib/eventual.rb CHANGED
@@ -22,17 +22,14 @@ module Eventual
22
22
  def self.parse text, opts = {}
23
23
  lang = opts.delete(:lang) || 'Es'
24
24
  year = opts.delete(:default_year)
25
- span = opts.delete(:default_event_span)
26
25
 
27
26
  raise ArgumentError, "Expected option `:default_year` to be an integer" if year && !(Integer === year)
28
- raise ArgumentError, "Expected option `:default_event_span` to be an integer" if span && !(Integer === span)
29
27
 
30
28
  parser = const_get("#{ lang.to_s[0..1].capitalize }DatesParser") rescue raise( NotImplementedError.new("Parsing has not yet been implemented for the language '#{lang}'"))
31
29
 
32
30
  node = parser.new.parse text.gsub('sab', 'sáb').gsub('mie', 'mié').downcase
33
31
 
34
32
  node.year = year if year
35
- node.time_span = span if span
36
33
  node
37
34
  end
38
35
  end
@@ -1,10 +1,14 @@
1
1
  grammar EsDates
2
2
  rule root
3
- (date_list / dates) year? times? <Eventual::Node>
3
+ compound_date (((space 'y' / ',') space / newline) compound_date)* <Eventual::Node> # ((space 'y' / ',') compound_date)*
4
+ end
5
+
6
+ rule compound_date
7
+ (same_year_date_list / dates) year? times?
4
8
  end
5
9
 
6
10
  rule dates
7
- (period / date)
11
+ period / date
8
12
  end
9
13
 
10
14
  rule period
@@ -15,8 +19,8 @@ grammar EsDates
15
19
  weekday_constrain? day_number month_name?
16
20
  end
17
21
 
18
- rule date_list
19
- dates (',' space dates)* (space 'y' space dates) / dates (space? "\n" space? dates)*
22
+ rule same_year_date_list
23
+ dates (',' space dates)* (space 'y' space dates)
20
24
  end
21
25
 
22
26
  rule range
@@ -33,7 +37,7 @@ grammar EsDates
33
37
 
34
38
  ##########
35
39
  rule times
36
- time_range / time_list
40
+ time_range_list / time_list
37
41
  end
38
42
 
39
43
  rule time_list
@@ -51,6 +55,10 @@ grammar EsDates
51
55
  rule time_range
52
56
  space 'de' space ('las' / 'la') first:(time_12 / time_24) space 'a' space ('las' / 'la') last:(time_12 / time_24) <Eventual::TimeRange>
53
57
  end
58
+
59
+ rule time_range_list
60
+ time_range ((space 'y' / ',') time_range)* <Eventual::TimeRangeList>
61
+ end
54
62
 
55
63
  ##########
56
64
  rule month_name
@@ -88,4 +96,8 @@ grammar EsDates
88
96
  rule space
89
97
  ' '+
90
98
  end
99
+
100
+ rule newline
101
+ space* "\n" space*
102
+ end
91
103
  end
@@ -42,7 +42,6 @@ module Eventual
42
42
 
43
43
  class Node < Treetop::Runtime::SyntaxNode
44
44
  attr_accessor :year
45
- attr_accessor :time_span
46
45
  attr_accessor :month
47
46
  attr_accessor :weekdays
48
47
  attr_accessor :times
@@ -219,8 +218,14 @@ module Eventual
219
218
  pm? ? super + 12 : super
220
219
  end
221
220
  end
221
+
222
+ class TimeRangeList < TimeList
223
+ def make year, month, day
224
+ map { |e| e.make year, month, day }
225
+ end
226
+ end
222
227
 
223
- class TimeRange < Treetop::Runtime::SyntaxNode #:nodoc:
228
+ class TimeRange < Time #:nodoc:
224
229
  def make year, month, day
225
230
  first_time = DateTime.civil year, month, day, first.hour, first.minute
226
231
  last_time = DateTime.civil year, month, day, last.hour, last.minute
@@ -5,17 +5,26 @@ describe Eventual, 'Es' do
5
5
  before do
6
6
  Date.stub!(:today).and_return Date.civil(2010)
7
7
  end
8
-
8
+
9
9
  describe 'proxy' do
10
10
  it "should raise NotImplementedError if using not implemented language" do
11
11
  lambda { Eventual.parse 'marzo', :lang => 'WP' }.should raise_error(NotImplementedError)
12
12
  end
13
13
  end
14
14
 
15
- shared_examples_for 'correctly parses' do
15
+ shared_examples_for 'correctly parses dates' do
16
16
  it { @result.should_not be_nil }
17
17
  it { @result.to_a.size.should == @dates.map.size }
18
18
  it { @result.should map_dates *@dates }
19
+ end
20
+
21
+ shared_examples_for 'correctly parses time ranges' do
22
+ it { @result.should_not be_nil }
23
+ it { @result.to_a.size.should == @ranges.map.size }
24
+ it { @result.should map_dates *@ranges }
25
+ end
26
+
27
+ shared_examples_for 'includes corresponding dates' do
19
28
  it { @dates.map{ |date| @result.should include(date) } }
20
29
  it { @result.should_not include(@dates.first - 1) }
21
30
  it { @result.should_not include(@dates.last + 1) }
@@ -28,7 +37,8 @@ describe Eventual, 'Es' do
28
37
  @result = Eventual.parse 'marzo', :lang => 'Es'
29
38
  @dates = (Date.parse('2010-3-1')..Date.parse('2010-3-31')).map
30
39
  end
31
- it_should_behave_like 'correctly parses'
40
+ it_should_behave_like 'correctly parses dates'
41
+ it_should_behave_like 'includes corresponding dates'
32
42
  end
33
43
 
34
44
  describe "month without year parsing 'marzo', case insensitive" do
@@ -36,16 +46,18 @@ describe Eventual, 'Es' do
36
46
  @result = Eventual.parse 'MarZo', :lang => 'Es'
37
47
  @dates = (Date.parse('2010-3-1')..Date.parse('2010-3-31')).map
38
48
  end
39
- it_should_behave_like 'correctly parses'
49
+ it_should_behave_like 'correctly parses dates'
50
+ it_should_behave_like 'includes corresponding dates'
40
51
  end
41
-
52
+
42
53
  describe 'month with year' do
43
54
  describe "parsing 'marzo de 2009'" do
44
55
  before do
45
56
  @result = Eventual.parse "marzo de 2009"
46
57
  @dates = (Date.parse('2009-3-1')..Date.parse('2009-3-31')).map
47
58
  end
48
- it_should_behave_like 'correctly parses'
59
+ it_should_behave_like 'correctly parses dates'
60
+ it_should_behave_like 'includes corresponding dates'
49
61
  end
50
62
 
51
63
  describe "parsing 'marzo del 2009'" do
@@ -53,7 +65,8 @@ describe Eventual, 'Es' do
53
65
  @result = Eventual.parse "marzo del 2009"
54
66
  @dates = (Date.parse('2009-3-1')..Date.parse('2009-3-31')).map
55
67
  end
56
- it_should_behave_like 'correctly parses'
68
+ it_should_behave_like 'correctly parses dates'
69
+ it_should_behave_like 'includes corresponding dates'
57
70
  end
58
71
 
59
72
  describe "parsing 'marzo 2009'" do
@@ -61,7 +74,8 @@ describe Eventual, 'Es' do
61
74
  @result = Eventual.parse "marzo 2009"
62
75
  @dates = (Date.parse('2009-3-1')..Date.parse('2009-3-31')).map
63
76
  end
64
- it_should_behave_like 'correctly parses'
77
+ it_should_behave_like 'correctly parses dates'
78
+ it_should_behave_like 'includes corresponding dates'
65
79
  end
66
80
 
67
81
  describe "parsing 'marzo, 2009'" do
@@ -69,7 +83,8 @@ describe Eventual, 'Es' do
69
83
  @result = Eventual.parse "marzo, 2009"
70
84
  @dates = (Date.parse('2009-3-1')..Date.parse('2009-3-31')).map
71
85
  end
72
- it_should_behave_like 'correctly parses'
86
+ it_should_behave_like 'correctly parses dates'
87
+ it_should_behave_like 'includes corresponding dates'
73
88
  end
74
89
 
75
90
  describe "parsing 'marzo '09'" do
@@ -77,7 +92,8 @@ describe Eventual, 'Es' do
77
92
  @result = Eventual.parse "marzo '09"
78
93
  @dates = (Date.parse('2009-3-1')..Date.parse('2009-3-31')).map
79
94
  end
80
- it_should_behave_like 'correctly parses'
95
+ it_should_behave_like 'correctly parses dates'
96
+ it_should_behave_like 'includes corresponding dates'
81
97
  end
82
98
  end
83
99
 
@@ -88,27 +104,32 @@ describe Eventual, 'Es' do
88
104
 
89
105
  describe "parsing 'lunes y martes marzo del 2010'" do
90
106
  before { @result = Eventual.parse "lunes y martes marzo del 2010" }
91
- it_should_behave_like 'correctly parses'
107
+ it_should_behave_like 'correctly parses dates'
108
+ it_should_behave_like 'includes corresponding dates'
92
109
  end
93
110
 
94
111
  describe "parsing 'lunes y martes de marzo del 2010'" do
95
112
  before { @result = Eventual.parse "lunes y martes de marzo del 2010" }
96
- it_should_behave_like 'correctly parses'
113
+ it_should_behave_like 'correctly parses dates'
114
+ it_should_behave_like 'includes corresponding dates'
97
115
  end
98
116
 
99
117
  describe "parsing 'lunes y martes durante marzo del 2010'" do
100
118
  before { @result = Eventual.parse "lunes y martes durante marzo del 2010" }
101
- it_should_behave_like 'correctly parses'
119
+ it_should_behave_like 'correctly parses dates'
120
+ it_should_behave_like 'includes corresponding dates'
102
121
  end
103
122
 
104
123
  describe "parsing 'lunes y martes durante todo marzo del 2010'" do
105
124
  before { @result = Eventual.parse "lunes y martes durante todo marzo del 2010" }
106
- it_should_behave_like 'correctly parses'
125
+ it_should_behave_like 'correctly parses dates'
126
+ it_should_behave_like 'includes corresponding dates'
107
127
  end
108
128
 
109
- describe "parsing 'lunes y martes, marzo del 2010'" do
129
+ describe "parsing 'lunes y martes, marzo de 2010'" do
110
130
  before { @result = Eventual.parse "lunes y martes, marzo del 2010" }
111
- it_should_behave_like 'correctly parses'
131
+ it_should_behave_like 'correctly parses dates'
132
+ it_should_behave_like 'includes corresponding dates'
112
133
  end
113
134
  end
114
135
 
@@ -122,34 +143,39 @@ describe Eventual, 'Es' do
122
143
 
123
144
  describe "should single day number for '21 de marzo'" do
124
145
  before { @result = Eventual.parse("21 de marzo") }
125
- it_should_behave_like 'correctly parses'
146
+ it_should_behave_like 'correctly parses dates'
147
+ it_should_behave_like 'includes corresponding dates'
126
148
  end
127
149
 
128
150
  describe "parsing '21 marzo'" do
129
151
  before { @result = Eventual.parse("21 marzo") }
130
- it_should_behave_like 'correctly parses'
152
+ it_should_behave_like 'correctly parses dates'
153
+ it_should_behave_like 'includes corresponding dates'
131
154
  end
132
155
 
133
156
  # describe "parsing 'marzo 21'" do
134
157
  # before { @result = Eventual.parse("21 marzo") }
135
- # it_should_behave_like 'correctly parses'
158
+ # it_should_behave_like 'correctly parses dates'
159
+ # it_should_behave_like 'includes corresponding dates'
136
160
  # end
137
161
 
138
162
  describe 'date with wday' do
139
163
  describe "parsing 'domingo 21 de marzo'" do
140
164
  before { @result = Eventual.parse("domingo 21 de marzo") }
141
- it_should_behave_like 'correctly parses'
165
+ it_should_behave_like 'correctly parses dates'
166
+ it_should_behave_like 'includes corresponding dates'
142
167
  end
143
168
 
144
169
  it "should raise WdayMatchError if weekday doesn't correspond to date" do
145
170
  lambda { Eventual.parse("lunes 21 de marzo").map }.should raise_error(Eventual::WdayMatchError)
146
171
  end
147
172
  end
148
-
173
+
149
174
  describe 'date with wday and comma' do
150
175
  describe "parsing 'domingo, 21 de marzo'" do
151
176
  before { @result = Eventual.parse("domingo, 21 de marzo") }
152
- it_should_behave_like 'correctly parses'
177
+ it_should_behave_like 'correctly parses dates'
178
+ it_should_behave_like 'includes corresponding dates'
153
179
  end
154
180
 
155
181
  it "should raise WdayMatchError if weekday doesn't correspond to date" do
@@ -165,17 +191,20 @@ describe Eventual, 'Es' do
165
191
 
166
192
  describe "day list for '1, 2 y 3 de marzo'" do
167
193
  before { @result = Eventual.parse("1, 2 y 3 marzo") }
168
- it_should_behave_like 'correctly parses'
194
+ it_should_behave_like 'correctly parses dates'
195
+ it_should_behave_like 'includes corresponding dates'
169
196
  end
170
197
 
171
198
  describe "day list for '1, 2 y 3 marzo'" do
172
199
  before { @result = Eventual.parse("1, 2 y 3 de marzo") }
173
- it_should_behave_like 'correctly parses'
200
+ it_should_behave_like 'correctly parses dates'
201
+ it_should_behave_like 'includes corresponding dates'
174
202
  end
175
203
 
176
204
  describe "day list with weekday 'lunes 1, martes 2 y miércoles 3 de marzo'" do
177
205
  before { @result = Eventual.parse("lunes 1, martes 2 y miércoles 3 de marzo") }
178
- it_should_behave_like 'correctly parses'
206
+ it_should_behave_like 'correctly parses dates'
207
+ it_should_behave_like 'includes corresponding dates'
179
208
  end
180
209
 
181
210
  it "should raise WdayMatchError if weekday doesn't correspond to date" do
@@ -192,22 +221,26 @@ describe Eventual, 'Es' do
192
221
 
193
222
  describe "day list for '1 al 3 de marzo" do
194
223
  before { @result = Eventual.parse("1 al 3 de marzo del '10") }
195
- it_should_behave_like 'correctly parses'
224
+ it_should_behave_like 'correctly parses dates'
225
+ it_should_behave_like 'includes corresponding dates'
196
226
  end
197
227
 
198
228
  describe "day list for '1 al 3, marzo" do
199
229
  before { @result = Eventual.parse("1 al 3, marzo del '10") }
200
- it_should_behave_like 'correctly parses'
230
+ it_should_behave_like 'correctly parses dates'
231
+ it_should_behave_like 'includes corresponding dates'
201
232
  end
202
233
 
203
234
  describe "day list for 'del 1 al 3 de marzo" do
204
235
  before { @result = Eventual.parse("del 1 al 3 de marzo del '10") }
205
- it_should_behave_like 'correctly parses'
236
+ it_should_behave_like 'correctly parses dates'
237
+ it_should_behave_like 'includes corresponding dates'
206
238
  end
207
239
 
208
240
  describe "day list for 'del 1 al 3, marzo" do
209
241
  before { @result = Eventual.parse("del 1 al 3, marzo del '10") }
210
- it_should_behave_like 'correctly parses'
242
+ it_should_behave_like 'correctly parses dates'
243
+ it_should_behave_like 'includes corresponding dates'
211
244
  end
212
245
  end
213
246
 
@@ -216,7 +249,8 @@ describe Eventual, 'Es' do
216
249
  @result = Eventual.parse "24 de febrero al 3 de marzo del 2010"
217
250
  @dates = (Date.parse('2010-2-24')..Date.parse('2010-3-3'))
218
251
  end
219
- it_should_behave_like 'correctly parses'
252
+ it_should_behave_like 'correctly parses dates'
253
+ it_should_behave_like 'includes corresponding dates'
220
254
  end
221
255
 
222
256
  describe "spanning diferent years '24 de diciembre del 2009 al 3 de enero del 2010" do
@@ -224,27 +258,31 @@ describe Eventual, 'Es' do
224
258
  @result = Eventual.parse("24 de diciembre del 2009 al 3 de enero del 2010")
225
259
  @dates = (Date.parse('2009-12-24')..Date.parse('2010-1-3'))
226
260
  end
227
- it_should_behave_like 'correctly parses'
261
+ it_should_behave_like 'correctly parses dates'
262
+ it_should_behave_like 'includes corresponding dates'
228
263
  end
229
-
264
+
230
265
  describe 'period spanning two dates' do
231
266
  before do
232
267
  @dates = (Date.parse('2008-10-1')..DateTime.parse('2008-12-2'))
233
268
  end
234
-
269
+
235
270
  describe "1 de octubre a 2 de diciembre del 2008" do
236
271
  before { @result = Eventual.parse "1 de octubre a 2 de diciembre del 2008" }
237
- it_should_behave_like 'correctly parses'
272
+ it_should_behave_like 'correctly parses dates'
273
+ it_should_behave_like 'includes corresponding dates'
238
274
  end
239
-
275
+
240
276
  describe "1 de octubre al 2 de diciembre del 2008" do
241
277
  before { @result = Eventual.parse "1 de octubre al 2 de diciembre del 2008" }
242
- it_should_behave_like 'correctly parses'
278
+ it_should_behave_like 'correctly parses dates'
279
+ it_should_behave_like 'includes corresponding dates'
243
280
  end
244
281
 
245
282
  describe "del miercoles 1 de octubre al martes 2 de diciembre del 2008" do
246
283
  before { @result = Eventual.parse "del miercoles 1 de octubre al martes 2 de diciembre del 2008" }
247
- it_should_behave_like 'correctly parses'
284
+ it_should_behave_like 'correctly parses dates'
285
+ it_should_behave_like 'includes corresponding dates'
248
286
  end
249
287
  end
250
288
 
@@ -253,24 +291,27 @@ describe Eventual, 'Es' do
253
291
  @result = Eventual.parse "lunes y martes del 1 de octubre al 2 de diciembre del 2008"
254
292
  @dates = (Date.parse('2008-10-1')..DateTime.parse('2008-12-2')).reject{ |day| not [1,2].include?(day.wday) }
255
293
  end
256
- it_should_behave_like 'correctly parses'
294
+ it_should_behave_like 'correctly parses dates'
295
+ it_should_behave_like 'includes corresponding dates'
257
296
  end
258
-
297
+
259
298
  describe "lunes y martes, del 1 de octubre al 2 de diciembre del 2008" do
260
299
  before do
261
300
  @result = Eventual.parse "lunes y martes, del 1 de octubre al 2 de diciembre del 2008"
262
301
  @dates = (Date.parse('2008-10-1')..DateTime.parse('2008-12-2')).reject{ |day| not [1,2].include?(day.wday) }
263
302
  end
264
- it_should_behave_like 'correctly parses'
303
+ it_should_behave_like 'correctly parses dates'
304
+ it_should_behave_like 'includes corresponding dates'
265
305
  end
266
-
306
+
267
307
  describe 'with weekday constrain' do
268
308
  describe "wdays for 'lunes y martes del 1 al 22 de marzo del '10" do
269
309
  before do
270
310
  @result = Eventual.parse "lunes y martes del 1 al 22 de marzo del '10"
271
311
  @dates = (Date.parse('2010-3-1')..Date.parse('2010-3-22')).reject{ |day| not [1,2].include?(day.wday) }
272
312
  end
273
- it_should_behave_like 'correctly parses'
313
+ it_should_behave_like 'correctly parses dates'
314
+ it_should_behave_like 'includes corresponding dates'
274
315
  end
275
316
 
276
317
  describe "wdays for 'fines de semana del 1 al 22 de marzo del '10" do
@@ -278,7 +319,8 @@ describe Eventual, 'Es' do
278
319
  @result = Eventual.parse "fines de semana del 1 al 22 de marzo del '10"
279
320
  @dates = (Date.parse('2010-3-1')..Date.parse('2010-3-22')).map.reject{ |day| not [6,0].include?(day.wday) }
280
321
  end
281
- it_should_behave_like 'correctly parses'
322
+ it_should_behave_like 'correctly parses dates'
323
+ it_should_behave_like 'includes corresponding dates'
282
324
  end
283
325
 
284
326
  describe "wdays for 'entre semana del 1 al 22 de marzo del '10" do
@@ -286,9 +328,10 @@ describe Eventual, 'Es' do
286
328
  @result = Eventual.parse("entre semana del 1 al 22 de marzo del '10")
287
329
  @dates = (Date.parse('2010-3-1')..Date.parse('2010-3-22')).map.reject{ |day| not (1..5).map.include?(day.wday) }
288
330
  end
289
- it_should_behave_like 'correctly parses'
331
+ it_should_behave_like 'correctly parses dates'
332
+ it_should_behave_like 'includes corresponding dates'
290
333
  end
291
-
334
+
292
335
  describe 'sugar for wday constrain' do
293
336
  before do
294
337
  @dates = (Date.parse('2010-3-1')..Date.parse('2010-3-22')).reject{ |day| not [1,2].include?(day.wday) }
@@ -296,22 +339,26 @@ describe Eventual, 'Es' do
296
339
 
297
340
  describe "wdays for 'lunes y martes del 1 al 22 de marzo del '10" do
298
341
  before { @result = Eventual.parse("lunes y martes del 1 al 22 de marzo del '10") }
299
- it_should_behave_like 'correctly parses'
342
+ it_should_behave_like 'correctly parses dates'
343
+ it_should_behave_like 'includes corresponding dates'
300
344
  end
301
345
 
302
346
  describe "wdays for 'todos los lunes y martes del 1 al 22 de marzo del '10" do
303
347
  before { @result = Eventual.parse("todos los lunes y martes del 1 al 22 de marzo del '10") }
304
- it_should_behave_like 'correctly parses'
348
+ it_should_behave_like 'correctly parses dates'
349
+ it_should_behave_like 'includes corresponding dates'
305
350
  end
306
351
 
307
352
  describe "wdays for 'los lunes y martes del 1 al 22 de marzo del '10" do
308
353
  before { @result = Eventual.parse("los lunes y martes del 1 al 22 de marzo del '10") }
309
- it_should_behave_like 'correctly parses'
354
+ it_should_behave_like 'correctly parses dates'
355
+ it_should_behave_like 'includes corresponding dates'
310
356
  end
311
-
357
+
312
358
  describe "wdays for 'los lunes y los martes del 1 al 22 de marzo del '10" do
313
359
  before { @result = Eventual.parse("los lunes y los martes del 1 al 22 de marzo del '10") }
314
- it_should_behave_like 'correctly parses'
360
+ it_should_behave_like 'correctly parses dates'
361
+ it_should_behave_like 'includes corresponding dates'
315
362
  end
316
363
  end
317
364
  end
@@ -323,16 +370,18 @@ describe Eventual, 'Es' do
323
370
  @result = Eventual.parse('octubre a diciembre del 2008')
324
371
  @dates = (Date.parse('2008-10-1')..DateTime.parse('2008-12-31')).map
325
372
  end
326
- it_should_behave_like 'correctly parses'
373
+ it_should_behave_like 'correctly parses dates'
374
+ it_should_behave_like 'includes corresponding dates'
327
375
  end
328
-
329
-
376
+
377
+
330
378
  describe 'lunes y martes de octubre del 2007 a diciembre del 2008' do
331
379
  before do
332
380
  @result = Eventual.parse('lunes y martes de octubre del 2007 a diciembre del 2008')
333
381
  @dates = (Date.parse('2007-10-1')..DateTime.parse('2008-12-31')).reject{ |day| not [1,2].include?(day.wday) }
334
382
  end
335
- it_should_behave_like 'correctly parses'
383
+ it_should_behave_like 'correctly parses dates'
384
+ it_should_behave_like 'includes corresponding dates'
336
385
  end
337
386
  end
338
387
 
@@ -341,182 +390,213 @@ describe Eventual, 'Es' do
341
390
  @result = Eventual.parse "1 de enero y lunes y martes del 1 de octubre al 2 de diciembre del 2008"
342
391
  @dates = [Date.parse('2008-1-1')] + (Date.parse('2008-10-1')..Date.parse('2008-12-2')).reject{ |day| not [1,2].include?(day.wday) }
343
392
  end
344
- it_should_behave_like 'correctly parses'
393
+ it_should_behave_like 'correctly parses dates'
394
+ it_should_behave_like 'includes corresponding dates'
345
395
  end
346
396
 
347
- describe 'compound dates in different lines' do
397
+ describe 'compound dates list' do
348
398
  before do
349
- @result = Eventual.parse "1 de enero\nlunes y martes del 1 de octubre al 2 de diciembre del 2008"
350
- @dates = [Date.parse('2008-1-1')] + (Date.parse('2008-10-1')..Date.parse('2008-12-2')).reject{ |day| not [1,2].include?(day.wday) }
399
+ @result = Eventual.parse "31 de diciembre de 1998 y 1 de enero de 1999"
400
+ @dates = [Date.parse('1998-12-31'), Date.parse('1999-1-1')]
351
401
  end
352
- it_should_behave_like 'correctly parses'
402
+ it_should_behave_like 'correctly parses dates'
403
+ it_should_behave_like 'includes corresponding dates'
353
404
  end
354
405
 
406
+ describe 'compound dates list separated by new line' do
407
+ before do
408
+ @result = Eventual.parse "31 de diciembre de 1998 \n 1 de enero de 1999"
409
+ @dates = [Date.parse('1998-12-31'), Date.parse('1999-1-1')]
410
+ end
411
+ it_should_behave_like 'correctly parses dates'
412
+ it_should_behave_like 'includes corresponding dates'
413
+ end
414
+
355
415
  describe 'with time constrain' do
356
416
  shared_examples_for 'outputs DateTime' do
357
417
  it "should all be DateTime" do
358
418
  @result.map{ |d| d.should be_a(DateTime) }
359
419
  end
360
420
  end
361
-
421
+
362
422
  describe 'single day with time' do
363
423
  before do
364
424
  @result = Eventual.parse('1 de enero del 2010 a las 15:00')
365
425
  @dates = [DateTime.civil 2010, 1, 1, 15]
366
426
  end
367
-
368
- it_should_behave_like 'correctly parses'
427
+
428
+ it_should_behave_like 'correctly parses dates'
429
+ it_should_behave_like 'includes corresponding dates'
369
430
  it_should_behave_like 'outputs DateTime'
370
431
  end
371
-
432
+
372
433
  describe 'single time with no sugar for month range' do
373
434
  before do
374
435
  @result = Eventual.parse('lunes y martes de diciembre del 2010 a las 15:00')
375
436
  @dates = (DateTime.parse('2010-12-1T15:00')..DateTime.parse('2010-12-31T15:00')).reject{ |day| not [1,2].include?(day.wday) }
376
437
  end
377
- it_should_behave_like 'correctly parses'
438
+ it_should_behave_like 'correctly parses dates'
439
+ it_should_behave_like 'includes corresponding dates'
378
440
  it_should_behave_like 'outputs DateTime'
379
441
  end
380
-
442
+
381
443
  describe 'single time with sugar 1 for month range' do
382
444
  before do
383
445
  @result = Eventual.parse('lunes y martes de diciembre a las 15:00 hrs.')
384
446
  @dates = (DateTime.parse('2010-12-1T15:00')..DateTime.parse('2010-12-31T15:00')).reject{ |day| not [1,2].include?(day.wday) }
385
447
  end
386
- it_should_behave_like 'correctly parses'
448
+ it_should_behave_like 'correctly parses dates'
449
+ it_should_behave_like 'includes corresponding dates'
387
450
  it_should_behave_like 'outputs DateTime'
388
451
  end
389
-
452
+
390
453
  describe 'single time with sugar 2 for month range' do
391
454
  before do
392
455
  @result = Eventual.parse('lunes y martes de diciembre a las 15:00hrs')
393
456
  @dates = (DateTime.parse('2010-12-1T15:00')..DateTime.parse('2010-12-31T15:00')).reject{ |day| not [1,2].include?(day.wday) }
394
457
  end
395
- it_should_behave_like 'correctly parses'
458
+ it_should_behave_like 'correctly parses dates'
459
+ it_should_behave_like 'includes corresponding dates'
396
460
  it_should_behave_like 'outputs DateTime'
397
461
  end
398
-
462
+
399
463
  describe 'single time with sugar 3 for month range' do
400
464
  before do
401
465
  @result = Eventual.parse('lunes y martes de diciembre a las 15 horas')
402
466
  @dates = (DateTime.parse('2010-12-1T15:00')..DateTime.parse('2010-12-31T15:00')).reject{ |day| not [1,2].include?(day.wday) }
403
467
  end
404
- it_should_behave_like 'correctly parses'
468
+ it_should_behave_like 'correctly parses dates'
469
+ it_should_behave_like 'includes corresponding dates'
405
470
  it_should_behave_like 'outputs DateTime'
406
471
  end
407
-
472
+
408
473
  describe 'two times for month range' do
409
474
  before do
410
475
  @result = Eventual.parse('lunes y martes de diciembre a las 16:00 y 15:00 horas')
411
476
  @dates = ((DateTime.parse('2010-12-1T15:00')..DateTime.parse('2010-12-31T15:00')).map + (DateTime.parse('2010-12-1T16:00')..DateTime.parse('2010-12-31T16:00')).map).reject{ |day| not [1,2].include?(day.wday) }
412
477
  end
413
- it_should_behave_like 'correctly parses'
478
+ it_should_behave_like 'correctly parses dates'
479
+ it_should_behave_like 'includes corresponding dates'
414
480
  it_should_behave_like 'outputs DateTime'
415
-
481
+
416
482
  it "should not include other time" do
417
483
  @result.should_not include(DateTime.parse('2010-12-06T14:00'))
418
484
  end
419
485
  end
420
-
486
+
421
487
  describe 'three times for month range' do
422
488
  before do
423
489
  @result = Eventual.parse('lunes y martes de diciembre a las 16:00, 17:00 y 15:00 horas')
424
490
  @dates = (
425
- (DateTime.parse('2010-12-1T15:00')..DateTime.parse('2010-12-31T15:00')).map +
426
- (DateTime.parse('2010-12-1T16:00')..DateTime.parse('2010-12-31T16:00')).map +
427
- (DateTime.parse('2010-12-1T17:00')..DateTime.parse('2010-12-31T17:00')).map
491
+ (DateTime.parse('2010-12-1T15:00')..DateTime.parse('2010-12-31T15:00')).map +
492
+ (DateTime.parse('2010-12-1T16:00')..DateTime.parse('2010-12-31T16:00')).map +
493
+ (DateTime.parse('2010-12-1T17:00')..DateTime.parse('2010-12-31T17:00')).map
428
494
  ).reject{ |day| not [1,2].include?(day.wday) }
429
495
  end
430
-
431
- it_should_behave_like 'correctly parses'
496
+
497
+ it_should_behave_like 'correctly parses dates'
498
+ it_should_behave_like 'includes corresponding dates'
432
499
  it_should_behave_like 'outputs DateTime'
433
-
500
+
434
501
  it "should not include other time" do
435
502
  @result.should_not include(DateTime.parse('2010-12-06T14:00'))
436
503
  end
437
504
  end
438
-
505
+
439
506
  describe 'range with time as 12 hours am' do
440
507
  before do
441
508
  @result = Eventual.parse('lunes y martes de diciembre a las 3 am')
442
509
  @dates = ((DateTime.parse('2010-12-1T03:00')..DateTime.parse('2010-12-31T03:00')).map).reject{ |day| not [1,2].include?(day.wday) }
443
510
  end
444
- it_should_behave_like 'correctly parses'
511
+ it_should_behave_like 'correctly parses dates'
512
+ it_should_behave_like 'includes corresponding dates'
445
513
  it_should_behave_like 'outputs DateTime'
446
-
514
+
447
515
  it "should not include other time" do
448
516
  @result.should_not include(DateTime.parse('2010-12-06T14:00'))
449
517
  end
450
518
  end
451
-
519
+
452
520
  describe 'range with time as 12 hours pm' do
453
521
  before do
454
522
  @result = Eventual.parse('lunes y martes de diciembre a las 3:00 pm')
455
523
  @dates = ((DateTime.parse('2010-12-1T15:00')..DateTime.parse('2010-12-31T15:00')).map).reject{ |day| not [1,2].include?(day.wday) }
456
524
  end
457
- it_should_behave_like 'correctly parses'
525
+ it_should_behave_like 'correctly parses dates'
526
+ it_should_behave_like 'includes corresponding dates'
458
527
  it_should_behave_like 'outputs DateTime'
459
-
528
+
460
529
  it "should not include other time" do
461
530
  @result.should_not include(DateTime.parse('2010-12-06T14:00'))
462
531
  end
463
532
  end
464
-
533
+
465
534
  describe 'event default timespan' do
466
535
  before do
467
536
  @result = Eventual.parse('1 de diciembre del 2010 a las 15:00')
468
537
  @dates = [DateTime.parse('2010-12-1T15:00')]
469
538
  end
470
- it_should_behave_like 'correctly parses'
471
- it_should_behave_like 'outputs DateTime'
472
- end
473
-
474
- describe 'event defined timespan' do
475
- before do
476
- @result = Eventual.parse('1 de diciembre del 2010 a las 15:00', :default_event_span => 120)
477
- @dates = [DateTime.parse('2010-12-1T15:00')]
478
- end
479
- it_should_behave_like 'correctly parses'
539
+ it_should_behave_like 'correctly parses dates'
540
+ it_should_behave_like 'includes corresponding dates'
480
541
  it_should_behave_like 'outputs DateTime'
481
542
  end
482
543
  end
483
-
544
+
484
545
  describe "with time range" do
485
546
  describe 'single day with time range' do
486
547
  before do
487
548
  @result = Eventual.parse('1 de enero del 2010 de las 15:00 a las 16:00')
488
549
  @ranges = [(DateTime.civil 2010, 1, 1, 15)..(DateTime.civil 2010, 1, 1, 16)]
550
+ @dates = @ranges.map{ |range| range.map }.flatten
551
+ end
552
+
553
+ it_should_behave_like 'correctly parses time ranges'
554
+ it_should_behave_like 'includes corresponding dates'
555
+ end
556
+
557
+ describe 'single day with two element time range list' do
558
+ before do
559
+ @result = Eventual.parse('1 de enero del 2010 de las 15:00 a las 16:00 y de las 17:00 a las 19:00')
560
+ @ranges = [(DateTime.civil 2010, 1, 1, 15)..(DateTime.civil 2010, 1, 1, 16), (DateTime.civil 2010, 1, 1, 17)..(DateTime.civil 2010, 1, 1, 19)]
561
+ @dates = @ranges.map{ |range| range.map }.flatten
489
562
  end
490
563
 
491
- it { @result.should_not be_nil }
492
- it { @result.to_a.size.should == @ranges.map.size }
493
- it { @result.should map_dates *@ranges }
494
- it { @ranges.each{ |range| range.each{ |date| @result.should include(date) } } }
495
- # it { @result.should_not include(@dates.first - 1) }
496
- # it { @result.should_not include(@dates.last + 1) }
497
- # it { @dates.select{ |d| @result.include? d }.map{ |d| d.to_s }.should == @dates.map{ |r| r.to_s } }
564
+ it_should_behave_like 'correctly parses time ranges'
565
+ it_should_behave_like 'includes corresponding dates'
566
+ end
567
+
568
+ describe 'single day with two element time range list' do
569
+ before do
570
+ @result = Eventual.parse('1 de enero del 2010 de las 15:00 a las 16:00, de las 17:00 a las 19:00 y de las 21:00 a las 22:00')
571
+ @ranges = [(DateTime.civil 2010, 1, 1, 15)..(DateTime.civil 2010, 1, 1, 16), (DateTime.civil 2010, 1, 1, 17)..(DateTime.civil 2010, 1, 1, 19), (DateTime.civil 2010, 1, 1, 21)..(DateTime.civil 2010, 1, 1, 22)]
572
+ @dates = @ranges.map{ |range| range.map }.flatten
573
+ end
498
574
 
575
+ it_should_behave_like 'correctly parses time ranges'
576
+ it_should_behave_like 'includes corresponding dates'
499
577
  end
500
578
  end
501
-
502
-
579
+
580
+
503
581
  describe 'Marshal dump' do
504
582
  describe "month without year parsing 'marzo'" do
505
583
  before do
506
584
  @result = Marshal.load Marshal.dump(Eventual.parse('marzo')).gsub('NaturalDates::', 'NaturalDates::Eventual::Es::')
507
585
  @dates = (Date.parse('2010-3-1')..Date.parse('2010-3-31')).map
508
586
  end
509
- it_should_behave_like 'correctly parses'
587
+ it_should_behave_like 'correctly parses dates'
588
+ it_should_behave_like 'includes corresponding dates'
510
589
  end
511
590
  end
512
-
591
+
513
592
  describe 'Default year' do
514
593
  describe "month without year parsing 'marzo'" do
515
594
  before do
516
- @result = Eventual.parse('marzo', :default_year => 2007)
517
- @dates = (Date.parse('2007-3-1')..Date.parse('2007-3-31')).map
595
+ @result = Eventual.parse('marzo', :default_year => 2007)
596
+ @dates = (Date.parse('2007-3-1')..Date.parse('2007-3-31')).map
518
597
  end
519
- it_should_behave_like 'correctly parses'
598
+ it_should_behave_like 'correctly parses dates'
599
+ it_should_behave_like 'includes corresponding dates'
520
600
  end
521
601
  end
522
602
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 5
8
- - 5
9
- version: 0.5.5
8
+ - 6
9
+ version: 0.5.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - Macario Ortega
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-20 00:00:00 -05:00
17
+ date: 2010-09-22 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency