nickel 0.0.6 → 0.1.0

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.
@@ -0,0 +1,1859 @@
1
+ require "spec_helper"
2
+ require "time"
3
+ require_relative "../../lib/nickel"
4
+ require_relative "../../lib/nickel/occurrence"
5
+ require_relative "../../lib/nickel/zdate"
6
+ require_relative "../../lib/nickel/ztime"
7
+
8
+ describe Nickel do
9
+ describe "#parse" do
10
+ let(:n) { Nickel.parse(query, run_date) }
11
+ let(:run_date) { Time.now }
12
+
13
+ context "when the query is 'oct 15 09'" do
14
+ let(:query) { "oct 15 09" }
15
+
16
+ describe "#message" do
17
+ it "is empty" do
18
+ expect(n.message).to be_empty
19
+ end
20
+ end
21
+
22
+ describe "#occurrences" do
23
+ it "is October 15 2009" do
24
+ expect(n.occurrences).to match_array [
25
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20091015")),
26
+ ]
27
+ end
28
+ end
29
+ end
30
+
31
+ context "when the query is 'wake up everyday at 11am'" do
32
+ let(:query) { "wake up everyday at 11am" }
33
+ let(:run_date) { Time.local(2014, 2, 26) }
34
+
35
+ describe "#message" do
36
+ it "is 'wake up'" do
37
+ expect(n.message).to eq "wake up"
38
+ end
39
+ end
40
+
41
+ describe "#occurrences" do
42
+ it "is daily at 11:00am" do
43
+ expect(n.occurrences).to match_array [
44
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20140226"), start_time: Nickel::ZTime.new("11")),
45
+ ]
46
+ end
47
+ end
48
+ end
49
+
50
+ context "when the query is 'guitar lessons every tuesday at 5pm'" do
51
+ let(:query) { "guitar lessons every tuesday at 5pm" }
52
+ let(:run_date) { Time.local(2014, 2, 26) }
53
+
54
+ describe "#message" do
55
+ it "is 'guitar lessons'" do
56
+ expect(n.message).to eq "guitar lessons"
57
+ end
58
+ end
59
+
60
+ describe "#occurrences" do
61
+ it "is weekly at 5:00pm on Tuesday" do
62
+ expect(n.occurrences).to match_array [
63
+ Nickel::Occurrence.new(type: :weekly, interval: 1, day_of_week: 1, start_time: Nickel::ZTime.new("17"), start_date: Nickel::ZDate.new("20140304"))
64
+ ]
65
+ end
66
+ end
67
+ end
68
+
69
+ context "when the query is 'drink specials on the second thursday of every month'" do
70
+ let(:query) { "drink specials on the second thursday of every month" }
71
+ let(:run_date) { Time.local(2014, 2, 26) }
72
+
73
+ describe "#message" do
74
+ it "is 'drink specials'" do
75
+ expect(n.message).to eq "drink specials"
76
+ end
77
+ end
78
+
79
+ describe "#occurrences" do
80
+ it "is monthly on the second Thursday of the month" do
81
+ expect(n.occurrences).to match_array [
82
+ Nickel::Occurrence.new(type: :daymonthly, interval: 1, week_of_month: 2, day_of_week: 3, start_date: Nickel::ZDate.new("20140313"))
83
+ ]
84
+ end
85
+ end
86
+ end
87
+
88
+ context "when the query is 'pay credit card every month on the 22nd'" do
89
+ let(:query) { "pay credit card every month on the 22nd" }
90
+ let(:run_date) { Time.local(2014, 2, 26) }
91
+
92
+ describe "#message" do
93
+ it "is pay credit card" do
94
+ expect(n.message).to eq "pay credit card"
95
+ end
96
+ end
97
+
98
+ describe "#occurrences" do
99
+ it "is monthly on the 22nd" do
100
+ expect(n.occurrences).to match_array [
101
+ Nickel::Occurrence.new(type: :datemonthly, interval: 1, date_of_month: 22, start_date: Nickel::ZDate.new("20140322"))
102
+ ]
103
+ end
104
+ end
105
+ end
106
+
107
+ context "when the query is 'band meeting every monday and wednesday at 2pm'" do
108
+ let(:query) { "band meeting every monday and wednesday at 2pm" }
109
+ let(:run_date) { Time.local(2014, 2, 26) }
110
+
111
+ describe "#message" do
112
+ it "is 'band meeting'" do
113
+ expect(n.message).to eq "band meeting"
114
+ end
115
+ end
116
+
117
+ describe "#occurrences" do
118
+ it "is Mondays at 2:00pm and Wednesdays at 2:00pm" do
119
+ expect(n.occurrences).to match_array [
120
+ Nickel::Occurrence.new(type: :weekly, interval: 1, day_of_week: 0, start_time: Nickel::ZTime.new("14"), start_date: Nickel::ZDate.new("20140303")),
121
+ Nickel::Occurrence.new(type: :weekly, interval: 1, day_of_week: 2, start_time: Nickel::ZTime.new("14"), start_date: Nickel::ZDate.new("20140226"))
122
+ ]
123
+ end
124
+ end
125
+ end
126
+
127
+ context "when the query is 'lunch 3 days from now'" do
128
+ let(:query) { "lunch 3 days from now" }
129
+ let(:run_date) { Time.local(2009,05,28) }
130
+
131
+ describe "#message" do
132
+ it "is 'lunch'" do
133
+ expect(n.message).to eq "lunch"
134
+ end
135
+ end
136
+
137
+ describe "#occurrences" do
138
+ it "is 3 days from now" do
139
+ expect(n.occurrences).to match_array [
140
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090531"))
141
+ ]
142
+ end
143
+ end
144
+ end
145
+
146
+ context "when the query is 'do something today'" do
147
+ let(:query) { "do something today" }
148
+ let(:run_date) { Time.local(2008, 8, 25) }
149
+
150
+ describe "#message" do
151
+ it "is 'do something'" do
152
+ expect(n.message).to eq "do something"
153
+ end
154
+ end
155
+
156
+ describe "#occurrences" do
157
+ it "is today" do
158
+ expect(n.occurrences).to match_array [
159
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080825"))
160
+ ]
161
+ end
162
+ end
163
+ end
164
+
165
+ context "when the query is 'there is a movie today at noon'" do
166
+ let(:query) { "there is a movie today at noon" }
167
+ let(:run_date) { Time.local(2008, 8, 25) }
168
+
169
+ describe "#message" do
170
+ it "is 'there is a movie'" do
171
+ expect(n.message).to eq "there is a movie"
172
+ end
173
+ end
174
+
175
+ describe "#occurrences" do
176
+ it "is today at noon" do
177
+ expect(n.occurrences).to match_array [
178
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080825"), start_time: Nickel::ZTime.new("12"))
179
+ ]
180
+ end
181
+ end
182
+ end
183
+
184
+ context "when the query is 'go to work today and tomorrow'" do
185
+ let(:query) { "go to work today and tomorrow" }
186
+ let(:run_date) { Time.local(2008, 8, 25) }
187
+
188
+ describe "#message" do
189
+ it "is 'go to work'" do
190
+ expect(n.message).to eq "go to work"
191
+ end
192
+ end
193
+
194
+ describe "#occurrences" do
195
+ it "is today and tomorrow" do
196
+ expect(n.occurrences).to match_array [
197
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080825")),
198
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080826"))
199
+ ]
200
+ end
201
+ end
202
+ end
203
+
204
+ context "when the query is 'appointments with the dentist are on oct 5 and oct 23rd'" do
205
+ let(:query) { "appointments with the dentist are on oct 5 and oct 23rd" }
206
+ let(:run_date) { Time.local(2008, 8, 25) }
207
+
208
+ describe "#message" do
209
+ it "is 'appointments with the dentist'" do
210
+ expect(n.message).to eq "appointments with the dentist"
211
+ end
212
+ end
213
+
214
+ describe "#occurrences" do
215
+ it "is October 5 and October 23" do
216
+ expect(n.occurrences).to match_array [
217
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081005")),
218
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081023"))
219
+ ]
220
+ end
221
+ end
222
+ end
223
+
224
+ context "when the query is 'today at noon and tomorrow at 5:45 am there will be an office meeting'" do
225
+ let(:query) { "today at noon and tomorrow at 5:45 am there will be an office meeting" }
226
+ let(:run_date) { Time.local(2008, 8, 25) }
227
+
228
+ describe "#message" do
229
+ it "is 'there will be an office meeting'" do
230
+ expect(n.message).to eq "there will be an office meeting"
231
+ end
232
+ end
233
+
234
+ describe "#occurrences" do
235
+ it "is noon today and 5:45am tomorrow" do
236
+ expect(n.occurrences).to match_array [
237
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080825"), start_time: Nickel::ZTime.new("12")),
238
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080826"), start_time: Nickel::ZTime.new("0545"))
239
+ ]
240
+ end
241
+ end
242
+ end
243
+
244
+ context "when the query is 'some stuff to do at noon today and 545am tomorrow'" do
245
+ let(:query) { "some stuff to do at noon today and 545am tomorrow" }
246
+ let(:run_date) { Time.local(2008, 8, 25) }
247
+
248
+ describe "#message" do
249
+ it "is 'some stuff to do'" do
250
+ expect(n.message).to eq "some stuff to do"
251
+ end
252
+ end
253
+
254
+ describe "#occurrences" do
255
+ it "is noon today and 5:45am tomorrow" do
256
+ expect(n.occurrences).to match_array [
257
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080825"), start_time: Nickel::ZTime.new("12")),
258
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080826"), start_time: Nickel::ZTime.new("0545"))
259
+ ]
260
+ end
261
+ end
262
+ end
263
+
264
+ context "when the query is 'go to the park tomorrow and thursday with the dog'" do
265
+ let(:query) { "go to the park tomorrow and thursday with the dog" }
266
+ let(:run_date) { Time.local(2008, 2, 29) }
267
+
268
+ describe "#message" do
269
+ it "is 'go to the park with the dog'" do
270
+ expect(n.message).to eq "go to the park with the dog"
271
+ end
272
+ end
273
+
274
+ describe "#occurrences" do
275
+ it "is tomorrow and thursday" do
276
+ expect(n.occurrences).to match_array [
277
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080301")),
278
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080306"))
279
+ ]
280
+ end
281
+ end
282
+ end
283
+
284
+ context "when the query is 'go to the park tomorrow and also on thursday with the dog'" do
285
+ let(:query) { "go to the park tomorrow and also on thursday with the dog" }
286
+ let(:run_date) { Time.local(2008, 2, 29) }
287
+
288
+ describe "#message" do
289
+ it "is 'go to the park with the dog'" do
290
+ expect(n.message).to eq "go to the park with the dog"
291
+ end
292
+ end
293
+
294
+ describe "#occurrences" do
295
+ it "is tomorrow and thursday" do
296
+ expect(n.occurrences).to match_array [
297
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080301")),
298
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080306"))
299
+ ]
300
+ end
301
+ end
302
+ end
303
+
304
+ context "when the query is 'how awesome tomorrow at 1am and from 2am to 5pm and thursday at 1pm is this?'" do
305
+ let(:query) { "how awesome tomorrow at 1am and from 2am to 5pm and thursday at 1pm is this?" }
306
+ let(:run_date) { Time.local(2008, 2, 29) }
307
+
308
+ describe "#message" do
309
+ it "is 'how awesome is this?'" do
310
+ expect(n.message).to eq "how awesome is this?"
311
+ end
312
+ end
313
+
314
+ describe "#occurrences" do
315
+ it "is 1:00am and 2:00am-5:00pm tomorrow and 1:00pm Thursday" do
316
+ expect(n.occurrences).to match_array [
317
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080301"), start_time: Nickel::ZTime.new("01")),
318
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080301"), start_time: Nickel::ZTime.new("02"), end_time: Nickel::ZTime.new("17")),
319
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080306"), start_time: Nickel::ZTime.new("13"))
320
+ ]
321
+ end
322
+ end
323
+ end
324
+
325
+ context "when the query is 'soccer practice monday tuesday and wednesday with susan'" do
326
+ let(:query) { "soccer practice monday tuesday and wednesday with susan" }
327
+ let(:run_date) { Time.local(2008, 9, 10) }
328
+
329
+ describe "#message" do
330
+ it "is 'soccer practice with susan'" do
331
+ expect(n.message).to eq "soccer practice with susan"
332
+ end
333
+ end
334
+
335
+ describe "#occurrences" do
336
+ it "is Monday, Tuesday and Wednesday" do
337
+ expect(n.occurrences).to match_array [
338
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080915")),
339
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080916")),
340
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080917"))
341
+ ]
342
+ end
343
+ end
344
+ end
345
+
346
+ context "when the query is 'monday and wednesday at 4pm I have guitar lessons'" do
347
+ let(:query) { "monday and wednesday at 4pm I have guitar lessons" }
348
+ let(:run_date) { Time.local(2008, 9, 10) }
349
+
350
+ describe "#message" do
351
+ it "is 'I have guitar lessons'" do
352
+ expect(n.message).to eq "I have guitar lessons"
353
+ end
354
+ end
355
+
356
+ describe "#occurrences" do
357
+ it "is 4:00pm Monday and 4:00pm Wednesday" do
358
+ expect(n.occurrences).to match_array [
359
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080915"), start_time: Nickel::ZTime.new("16")),
360
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080917"), start_time: Nickel::ZTime.new("16"))
361
+ ]
362
+ end
363
+ end
364
+ end
365
+
366
+ context "when the query is 'meet with so and so 4pm on monday and wednesday'" do
367
+ let(:query) { "meet with so and so 4pm on monday and wednesday" }
368
+ let(:run_date) { Time.local(2008, 9, 10) }
369
+
370
+ describe "#message" do
371
+ it "is 'meet with so and so'" do
372
+ expect(n.message).to eq "meet with so and so"
373
+ end
374
+ end
375
+
376
+ describe "#occurrences" do
377
+ it "is 4:00pm Monday and 4:00pm Wednesday" do
378
+ expect(n.occurrences).to match_array [
379
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080915"), start_time: Nickel::ZTime.new("16")),
380
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080917"), start_time: Nickel::ZTime.new("16"))
381
+ ]
382
+ end
383
+ end
384
+ end
385
+
386
+ context "when the query is 'flight this sunday on American'" do
387
+ let(:query) { "flight this sunday on American" }
388
+ let(:run_date) { Time.local(2008, 8, 25) }
389
+
390
+ describe "#message" do
391
+ it "is 'flight on American'" do
392
+ expect(n.message).to eq "flight on American"
393
+ end
394
+ end
395
+
396
+ describe "#occurrences" do
397
+ it "is this Sunday" do
398
+ expect(n.occurrences).to match_array [
399
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080831"))
400
+ ]
401
+ end
402
+ end
403
+ end
404
+
405
+ context "when the query is 'Flight to Miami this sunday 9-5am on Jet Blue'" do
406
+ let(:query) { "Flight to Miami this sunday 9-5am on Jet Blue" }
407
+ let(:run_date) { Time.local(2007, 11, 25) }
408
+
409
+ describe "#message" do
410
+ it "is 'Flight to Miami on Jet Blue'" do
411
+ expect(n.message).to eq "Flight to Miami on Jet Blue"
412
+ end
413
+ end
414
+
415
+ describe "#occurrences" do
416
+ it "is 9:00pm to 5:00am this Sunday" do
417
+ # FIXME: this occurrence should have an end date
418
+ expect(n.occurrences).to match_array [
419
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20071125"), start_time: Nickel::ZTime.new("21"), end_time: Nickel::ZTime.new("05"))
420
+ ]
421
+ end
422
+ end
423
+ end
424
+
425
+ context "when the query is 'Go to the park this sunday 9-5'" do
426
+ let(:query) { "Go to the park this sunday 9-5" }
427
+ let(:run_date) { Time.local(2007, 11, 25) }
428
+
429
+ describe "#message" do
430
+ it "is 'Go to the park'" do
431
+ expect(n.message).to eq "Go to the park"
432
+ end
433
+ end
434
+
435
+ describe "#occurrences" do
436
+ it "is 9:00am to 5:00pm this Sunday" do
437
+ expect(n.occurrences).to match_array [
438
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20071125"), start_time: Nickel::ZTime.new("09"), end_time: Nickel::ZTime.new("17"))
439
+ ]
440
+ end
441
+ end
442
+ end
443
+
444
+ context "when the query is 'movie showings are today at 10, 11, 12, and 1 to 5'" do
445
+ let(:query) { "movie showings are today at 10, 11, 12, and 1 to 5" }
446
+ let(:run_date) { Time.local(2008, 9, 10) }
447
+
448
+ describe "#message" do
449
+ it "is 'movie showings'" do
450
+ expect(n.message).to eq "movie showings"
451
+ end
452
+ end
453
+
454
+ describe "#occurrences" do
455
+ it "is 10:00am, 11:00am, 12:00pm and 1:00pm to 5:00pm" do
456
+ expect(n.occurrences).to match_array [
457
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("10")),
458
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("11")),
459
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("12")),
460
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("13"), end_time: Nickel::ZTime.new("17"))
461
+ ]
462
+ end
463
+ end
464
+ end
465
+
466
+ context "when the query is 'Games today at 10, 11, 12, 1'" do
467
+ let(:query) { "Games today at 10, 11, 12, 1" }
468
+ let(:run_date) { Time.local(2008, 9, 10) }
469
+
470
+ describe "#message" do
471
+ it "is 'Games'" do
472
+ expect(n.message).to eq "Games"
473
+ end
474
+ end
475
+
476
+ describe "#occurrences" do
477
+ it "is 10:00am, 11:00am, 12:00pm and 1:00pm" do
478
+ expect(n.occurrences).to match_array [
479
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("10")),
480
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("11")),
481
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("12")),
482
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("13"))
483
+ ]
484
+ end
485
+ end
486
+ end
487
+
488
+ context "when the query is 'Flight is a week from today'" do
489
+ let(:query) { "Flight is a week from today" }
490
+ let(:run_date) { Time.local(2009, 1, 1) }
491
+
492
+ describe "#message" do
493
+ it "is 'Flight'" do
494
+ expect(n.message).to eq "Flight"
495
+ end
496
+ end
497
+
498
+ describe "#occurrences" do
499
+ it "is a week from today" do
500
+ expect(n.occurrences).to match_array [
501
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090108"))
502
+ ]
503
+ end
504
+ end
505
+ end
506
+
507
+ context "when the query is 'Bill is due two weeks from tomorrow'" do
508
+ let(:query) { "Bill is due two weeks from tomorrow" }
509
+ let(:run_date) { Time.local(2008, 12, 24) }
510
+
511
+ describe "#message" do
512
+ it "is 'Bill is due'" do
513
+ expect(n.message).to eq "Bill is due"
514
+ end
515
+ end
516
+
517
+ describe "#occurrences" do
518
+ it "is two weeks from tomorrow" do
519
+ expect(n.occurrences).to match_array [
520
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090108"))
521
+ ]
522
+ end
523
+ end
524
+ end
525
+
526
+ context "when the query is 'Tryouts are two months from now'" do
527
+ let(:query) { "Tryouts are two months from now" }
528
+ let(:run_date) { Time.local(2008, 12, 24) }
529
+
530
+ describe "#message" do
531
+ it "is 'Tryouts'" do
532
+ expect(n.message).to eq "Tryouts"
533
+ end
534
+ end
535
+
536
+ describe "#occurrences" do
537
+ it "is two months from now" do
538
+ expect(n.occurrences).to match_array [
539
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090224"))
540
+ ]
541
+ end
542
+ end
543
+ end
544
+
545
+ context "when the query is 'baseball game is on october second'" do
546
+ let(:query) { "baseball game is on october second" }
547
+ let(:run_date) { Time.local(2008, 1, 30) }
548
+
549
+ describe "#message" do
550
+ it "is 'baseball game'" do
551
+ expect(n.message).to eq "baseball game"
552
+ end
553
+ end
554
+
555
+ describe "#occurrences" do
556
+ it "is October 2nd" do
557
+ expect(n.occurrences).to match_array [
558
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081002"))
559
+ ]
560
+ end
561
+ end
562
+ end
563
+
564
+ context "when the query is 'baseball game is on 10/2'" do
565
+ # FIXME: n should support US and international date formats
566
+ let(:query) { "baseball game is on 10/2" }
567
+ let(:run_date) { Time.local(2008, 1, 30) }
568
+
569
+ describe "#occurrences" do
570
+ it "is October 2nd" do
571
+ expect(n.occurrences).to match_array [
572
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081002"))
573
+ ]
574
+ end
575
+ end
576
+ end
577
+
578
+ context "when the query is 'baseball game is on 10/2/08'" do
579
+ let(:query) { "baseball game is on 10/2/08" }
580
+ let(:run_date) { Time.local(2008, 1, 30) }
581
+
582
+ describe "#occurrences" do
583
+ it "is October 2nd" do
584
+ expect(n.occurrences).to match_array [
585
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081002"))
586
+ ]
587
+ end
588
+ end
589
+ end
590
+
591
+ context "when the query is 'baseball game is on 10/2/2008'" do
592
+ let(:query) { "baseball game is on 10/2/2008" }
593
+ let(:run_date) { Time.local(2008, 1, 30) }
594
+
595
+ describe "#occurrences" do
596
+ it "is October 2nd" do
597
+ expect(n.occurrences).to match_array [
598
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081002"))
599
+ ]
600
+ end
601
+ end
602
+ end
603
+
604
+ context "when the query is 'baseball game is on october 2nd 08'" do
605
+ let(:query) { "baseball game is on october 2nd 08" }
606
+ let(:run_date) { Time.local(2008, 1, 30) }
607
+
608
+ describe "#occurrences" do
609
+ it "is October 2nd" do
610
+ expect(n.occurrences).to match_array [
611
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081002"))
612
+ ]
613
+ end
614
+ end
615
+ end
616
+
617
+ context "when the query is 'baseball game is on october 2nd 2008'" do
618
+ let(:query) { "baseball game is on october 2nd 2008" }
619
+ let(:run_date) { Time.local(2008, 1, 30) }
620
+
621
+ describe "#occurrences" do
622
+ it "is October 2nd" do
623
+ expect(n.occurrences).to match_array [
624
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081002"))
625
+ ]
626
+ end
627
+ end
628
+ end
629
+
630
+ context "when the query is 'something for the next 1 day'" do
631
+ let(:query) { "something for the next 1 day" }
632
+ let(:run_date) { Time.local(2007, 12, 29) }
633
+
634
+ describe "#message" do
635
+ it "is 'something'" do
636
+ expect(n.message).to eq "something"
637
+ end
638
+ end
639
+
640
+ describe "#occurrences" do
641
+ it "is today and tomorrow" do
642
+ expect(n.occurrences).to match_array [
643
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20071229"), end_date: Nickel::ZDate.new("20071230"))
644
+ ]
645
+ end
646
+ end
647
+ end
648
+
649
+ context "when the query is 'pick up groceries tomorrow and also the kids'" do
650
+ let(:query) { "pick up groceries tomorrow and also the kids" }
651
+ let(:run_date) { Time.local(2008, 10, 28) }
652
+
653
+ describe "#message" do
654
+ it "is 'pick up groceries and also the kids'" do
655
+ expect(n.message).to eq "pick up groceries and also the kids"
656
+ end
657
+ end
658
+
659
+ describe "#occurrences" do
660
+ it "is tomorrow" do
661
+ expect(n.occurrences).to match_array [
662
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081029"))
663
+ ]
664
+ end
665
+ end
666
+ end
667
+
668
+ context "when the query is 'do something on january first'" do
669
+ let(:query) { "do something on january first" }
670
+ let(:run_date) { Time.local(2008, 11, 30) }
671
+
672
+ describe "#message" do
673
+ it "is 'do something'" do
674
+ expect(n.message).to eq "do something"
675
+ end
676
+ end
677
+
678
+ describe "#occurrences" do
679
+ it "is January 1st" do
680
+ expect(n.occurrences).to match_array [
681
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090101"))
682
+ ]
683
+ end
684
+ end
685
+ end
686
+
687
+ context "when the query is 'on the first of the month, go to the museum'" do
688
+ let(:query) { "on the first of the month, go to the museum" }
689
+ let(:run_date) { Time.local(2008, 11, 30) }
690
+
691
+ describe "#message" do
692
+ it "is 'go to the museum'" do
693
+ expect(n.message).to eq "go to the museum"
694
+ end
695
+ end
696
+
697
+ describe "#occurrences" do
698
+ it "is the 1st of this month" do
699
+ expect(n.occurrences).to match_array [
700
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081201"))
701
+ ]
702
+ end
703
+ end
704
+ end
705
+
706
+ context "when the query is 'today from 8 to 4 and 9 to 5'" do
707
+ let(:query) { "today from 8 to 4 and 9 to 5" }
708
+ let(:run_date) { Time.local(2008, 9, 10) }
709
+
710
+ describe "#occurrences" do
711
+ it "is 8:00am to 4:00pm and 9:00am to 5:00pm" do
712
+ expect(n.occurrences).to match_array [
713
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("08"), end_time: Nickel::ZTime.new("16")),
714
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("09"), end_time: Nickel::ZTime.new("17"))
715
+ ]
716
+ end
717
+ end
718
+ end
719
+
720
+ context "when the query is 'today from 9 to 5pm and 8am to 4'" do
721
+ let(:query) { "today from 9 to 5pm and 8am to 4" }
722
+ let(:run_date) { Time.local(2008, 9, 10) }
723
+
724
+ describe "#occurrences" do
725
+ it "is 9:00am to 5:00pm and 8:00am to 4:00pm" do
726
+ expect(n.occurrences).to match_array [
727
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("08"), end_time: Nickel::ZTime.new("16")),
728
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("09"), end_time: Nickel::ZTime.new("17"))
729
+ ]
730
+ end
731
+ end
732
+ end
733
+
734
+ context "when the query is 'today at 11am, 2 and 3, and tomorrow from 2 to 6pm'" do
735
+ let(:query) { "today at 11am, 2 and 3, and tomorrow from 2 to 6pm" }
736
+ let(:run_date) { Time.local(2008, 9, 10) }
737
+
738
+ describe "#occurrences" do
739
+ it "is 11:00am, 2:00pm, 3:00pm, 2:00pm to 6:00pm" do
740
+ expect(n.occurrences).to match_array [
741
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("11")),
742
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("14")),
743
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080910"), start_time: Nickel::ZTime.new("15")),
744
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080911"), start_time: Nickel::ZTime.new("14"), end_time: Nickel::ZTime.new("18"))
745
+ ]
746
+ end
747
+ end
748
+ end
749
+
750
+ context "when the query is 'next monday'" do
751
+ let(:query) { "next monday" }
752
+ let(:run_date) { Time.local(2008, 10, 27) }
753
+
754
+ describe "#occurrences" do
755
+ it "is next monday" do
756
+ expect(n.occurrences).to match_array [
757
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081103"))
758
+ ]
759
+ end
760
+ end
761
+ end
762
+
763
+ context "when the query is 'last monday this month'" do
764
+ let(:query) { "last monday this month" }
765
+ let(:run_date) { Time.local(2008, 8, 25) }
766
+
767
+ describe "#occurrences" do
768
+ it "is last monday this month" do
769
+ expect(n.occurrences).to match_array [
770
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080825"))
771
+ ]
772
+ end
773
+ end
774
+ end
775
+
776
+ context "when the query is 'the last monday of this month'" do
777
+ let(:query) { "the last monday of this month" }
778
+ let(:run_date) { Time.local(2008, 8, 25) }
779
+
780
+ describe "#occurrences" do
781
+ it "is last monday this month" do
782
+ expect(n.occurrences).to match_array [
783
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080825"))
784
+ ]
785
+ end
786
+ end
787
+ end
788
+
789
+ context "when the query is 'the last thursday of the month'" do
790
+ let(:query) { "the last thursday of the month" }
791
+ let(:run_date) { Time.local(2008, 8, 25) }
792
+
793
+ describe "#occurrences" do
794
+ it "is last thursday this month" do
795
+ expect(n.occurrences).to match_array [
796
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080828"))
797
+ ]
798
+ end
799
+ end
800
+ end
801
+
802
+ context "when the query is 'third monday next month'" do
803
+ let(:query) { "third monday next month" }
804
+ let(:run_date) { Time.local(2008, 8, 25) }
805
+
806
+ describe "#occurrences" do
807
+ it "is third monday last month" do
808
+ expect(n.occurrences).to match_array [
809
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080915"))
810
+ ]
811
+ end
812
+ end
813
+ end
814
+
815
+ context "when the query is 'the third monday next month'" do
816
+ let(:query) { "the third monday next month" }
817
+ let(:run_date) { Time.local(2008, 8, 25) }
818
+
819
+ describe "#occurrences" do
820
+ it "is third monday last month" do
821
+ expect(n.occurrences).to match_array [
822
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080915"))
823
+ ]
824
+ end
825
+ end
826
+ end
827
+
828
+ context "when the query is 'the twentyeigth'" do
829
+ let(:query) { "the twentyeigth" }
830
+ let(:run_date) { Time.local(2010, 3, 20) }
831
+
832
+ describe "#occurrences" do
833
+ it "is the 28th of this month" do
834
+ expect(n.occurrences).to match_array [
835
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20100328"))
836
+ ]
837
+ end
838
+ end
839
+ end
840
+
841
+ context "when the query is '28th'" do
842
+ let(:query) { "28th" }
843
+ let(:run_date) { Time.local(2010, 3, 20) }
844
+
845
+ describe "#occurrences" do
846
+ it "is the 28th of this month" do
847
+ expect(n.occurrences).to match_array [
848
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20100328"))
849
+ ]
850
+ end
851
+ end
852
+ end
853
+
854
+ context "when the query is '28'" do
855
+ let(:query) { "28" }
856
+ let(:run_date) { Time.local(2010, 3, 20) }
857
+
858
+ describe "#occurrences" do
859
+ it "is the 28th of this month" do
860
+ expect(n.occurrences).to match_array [
861
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20100328"))
862
+ ]
863
+ end
864
+ end
865
+ end
866
+
867
+ context "when the query is 'the 28th of this month'" do
868
+ let(:query) { "the 28th of this month" }
869
+ let(:run_date) { Time.local(2010, 3, 20) }
870
+
871
+ describe "#occurrences" do
872
+ it "is the 28th of this month" do
873
+ expect(n.occurrences).to match_array [
874
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20100328"))
875
+ ]
876
+ end
877
+ end
878
+ end
879
+
880
+ context "when the query is '28th of this month'" do
881
+ let(:query) { "28th of this month" }
882
+ let(:run_date) { Time.local(2010, 3, 20) }
883
+
884
+ describe "#occurrences" do
885
+ it "is the 28th of this month" do
886
+ expect(n.occurrences).to match_array [
887
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20100328"))
888
+ ]
889
+ end
890
+ end
891
+ end
892
+
893
+ context "when the query is 'the 28th this month'" do
894
+ let(:query) { "the 28th this month" }
895
+ let(:run_date) { Time.local(2010, 3, 20) }
896
+
897
+ describe "#occurrences" do
898
+ it "is the 28th of this month" do
899
+ expect(n.occurrences).to match_array [
900
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20100328"))
901
+ ]
902
+ end
903
+ end
904
+ end
905
+
906
+ context "when the query is 'next month 28th'" do
907
+ let(:query) { "next month 28th" }
908
+ let(:run_date) { Time.local(2008, 12, 31) }
909
+
910
+ describe "#occurrences" do
911
+ it "is the 28th of next month" do
912
+ expect(n.occurrences).to match_array [
913
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090128"))
914
+ ]
915
+ end
916
+ end
917
+ end
918
+
919
+ context "when the query is '28th next month'" do
920
+ let(:query) { "28th next month" }
921
+ let(:run_date) { Time.local(2008, 12, 31) }
922
+
923
+ describe "#occurrences" do
924
+ it "is the 28th of next month" do
925
+ expect(n.occurrences).to match_array [
926
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090128"))
927
+ ]
928
+ end
929
+ end
930
+ end
931
+
932
+ context "when the query is 'the 28th next month'" do
933
+ let(:query) { "the 28th next month" }
934
+ let(:run_date) { Time.local(2008, 12, 31) }
935
+
936
+ describe "#occurrences" do
937
+ it "is the 28th of next month" do
938
+ expect(n.occurrences).to match_array [
939
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090128"))
940
+ ]
941
+ end
942
+ end
943
+ end
944
+
945
+ context "when the query is '28th of next month'" do
946
+ let(:query) { "28th of next month" }
947
+ let(:run_date) { Time.local(2008, 12, 31) }
948
+
949
+ describe "#occurrences" do
950
+ it "is the 28th of next month" do
951
+ expect(n.occurrences).to match_array [
952
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090128"))
953
+ ]
954
+ end
955
+ end
956
+ end
957
+
958
+ context "when the query is 'the 28th of next month'" do
959
+ let(:query) { "the 28th of next month" }
960
+ let(:run_date) { Time.local(2008, 12, 31) }
961
+
962
+ describe "#occurrences" do
963
+ it "is the 28th of next month" do
964
+ expect(n.occurrences).to match_array [
965
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090128"))
966
+ ]
967
+ end
968
+ end
969
+ end
970
+
971
+ context "when the query is '5 days from now'" do
972
+ let(:query) { "5 days from now" }
973
+ let(:run_date) { Time.local(2008, 9, 11) }
974
+
975
+ describe "#occurrences" do
976
+ it "is 5 days from now" do
977
+ expect(n.occurrences).to match_array [
978
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080916"))
979
+ ]
980
+ end
981
+ end
982
+ end
983
+
984
+ context "when the query is 'in 5 days'" do
985
+ let(:query) { "in 5 days" }
986
+ let(:run_date) { Time.local(2008, 9, 11) }
987
+
988
+ describe "#occurrences" do
989
+ it "is 5 days from now" do
990
+ expect(n.occurrences).to match_array [
991
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080916"))
992
+ ]
993
+ end
994
+ end
995
+ end
996
+
997
+ context "when the query is '5 weeks from now'" do
998
+ let(:query) { "5 weeks from now" }
999
+ let(:run_date) { Time.local(2008, 9, 11) }
1000
+
1001
+ describe "#occurrences" do
1002
+ it "is 5 weeks from now" do
1003
+ expect(n.occurrences).to match_array [
1004
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081016"))
1005
+ ]
1006
+ end
1007
+ end
1008
+ end
1009
+
1010
+ context "when the query is 'in 5 weeks'" do
1011
+ let(:query) { "in 5 weeks" }
1012
+ let(:run_date) { Time.local(2008, 9, 11) }
1013
+
1014
+ describe "#occurrences" do
1015
+ it "is 5 weeks from now" do
1016
+ expect(n.occurrences).to match_array [
1017
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20081016"))
1018
+ ]
1019
+ end
1020
+ end
1021
+ end
1022
+
1023
+ context "when the query is '5 months from now'" do
1024
+ let(:query) { "5 months from now" }
1025
+ let(:run_date) { Time.local(2008, 9, 11) }
1026
+
1027
+ describe "#occurrences" do
1028
+ it "is 5 months from now" do
1029
+ expect(n.occurrences).to match_array [
1030
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090211"))
1031
+ ]
1032
+ end
1033
+ end
1034
+ end
1035
+
1036
+ context "when the query is 'in 5 months'" do
1037
+ let(:query) { "in 5 months" }
1038
+ let(:run_date) { Time.local(2008, 9, 11) }
1039
+
1040
+ describe "#occurrences" do
1041
+ it "is 5 months from now" do
1042
+ expect(n.occurrences).to match_array [
1043
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090211"))
1044
+ ]
1045
+ end
1046
+ end
1047
+ end
1048
+
1049
+ context "when the query is '5 minutes from now'" do
1050
+ let(:query) { "5 minutes from now" }
1051
+ let(:run_date) { Time.local(2008, 9, 11) }
1052
+
1053
+ describe "#occurrences" do
1054
+ it "is 5 minutes from now" do
1055
+ expect(n.occurrences).to match_array [
1056
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080911"), start_time: Nickel::ZTime.new("0005"))
1057
+ ]
1058
+ end
1059
+ end
1060
+ end
1061
+
1062
+ context "when the query is 'in 5 minutes'" do
1063
+ let(:query) { "in 5 minutes" }
1064
+ let(:run_date) { Time.local(2008, 9, 11) }
1065
+
1066
+ describe "#occurrences" do
1067
+ it "is 5 minutes from now" do
1068
+ expect(n.occurrences).to match_array [
1069
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080911"), start_time: Nickel::ZTime.new("0005"))
1070
+ ]
1071
+ end
1072
+ end
1073
+ end
1074
+
1075
+ context "when the query is '5 hours from now'" do
1076
+ let(:query) { "5 hours from now" }
1077
+ let(:run_date) { Time.local(2008, 9, 11) }
1078
+
1079
+ describe "#occurrences" do
1080
+ it "is 5 hours from now" do
1081
+ expect(n.occurrences).to match_array [
1082
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080911"), start_time: Nickel::ZTime.new("05"))
1083
+ ]
1084
+ end
1085
+ end
1086
+ end
1087
+
1088
+ context "when the query is 'in 5 hours'" do
1089
+ let(:query) { "in 5 hours" }
1090
+ let(:run_date) { Time.local(2008, 9, 11) }
1091
+
1092
+ describe "#occurrences" do
1093
+ it "is 5 hours from now" do
1094
+ expect(n.occurrences).to match_array [
1095
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080911"), start_time: Nickel::ZTime.new("05"))
1096
+ ]
1097
+ end
1098
+ end
1099
+ end
1100
+
1101
+ context "when the query is '24 hours from now'" do
1102
+ let(:query) { "24 hours from now" }
1103
+ let(:run_date) { Time.local(2008, 9, 11) }
1104
+
1105
+ describe "#occurrences" do
1106
+ it "is 24 hours from now" do
1107
+ expect(n.occurrences).to match_array [
1108
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080912"), start_time: Nickel::ZTime.new("000000"))
1109
+ ]
1110
+ end
1111
+ end
1112
+ end
1113
+
1114
+ context "when the query is 'tomorrow through sunday'" do
1115
+ let(:query) { "tomorrow through sunday" }
1116
+ let(:run_date) { Time.local(2008, 9, 18) }
1117
+
1118
+ describe "#occurrences" do
1119
+ it "is tomorrow to sunday" do
1120
+ expect(n.occurrences).to match_array [
1121
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20080919"), end_date: Nickel::ZDate.new("20080921"), interval: 1)
1122
+ ]
1123
+ end
1124
+ end
1125
+ end
1126
+
1127
+ context "when the query is 'tomorrow through sunday from 9 to 5'" do
1128
+ let(:query) { "tomorrow through sunday from 9 to 5" }
1129
+ let(:run_date) { Time.local(2008, 9, 18) }
1130
+
1131
+ describe "#occurrences" do
1132
+ it "is 9:00am to 5:00pm every day from tomorrow to sunday" do
1133
+ expect(n.occurrences).to match_array [
1134
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20080919"), end_date: Nickel::ZDate.new("20080921"), start_time: Nickel::ZTime.new("09"), end_time: Nickel::ZTime.new("17"), interval: 1)
1135
+ ]
1136
+ end
1137
+ end
1138
+ end
1139
+
1140
+ context "when the query is '9 to 5 tomorrow through sunday'" do
1141
+ let(:query) { "9 to 5 tomorrow through sunday" }
1142
+ let(:run_date) { Time.local(2008, 9, 18) }
1143
+
1144
+ describe "#occurrences" do
1145
+ it "is 9:00am to 5:00pm every day from tomorrow to sunday" do
1146
+ expect(n.occurrences).to match_array [
1147
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20080919"), end_date: Nickel::ZDate.new("20080921"), start_time: Nickel::ZTime.new("09"), end_time: Nickel::ZTime.new("17"), interval: 1)
1148
+ ]
1149
+ end
1150
+ end
1151
+ end
1152
+
1153
+ context "when the query is 'october 2nd through 5th'" do
1154
+ let(:query) { "october 2nd through 5th" }
1155
+ let(:run_date) { Time.local(2008, 9, 18) }
1156
+
1157
+ describe "#occurrences" do
1158
+ it "is every day from October 2nd to October 5th" do
1159
+ expect(n.occurrences).to match_array [
1160
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081005"), interval: 1)
1161
+ ]
1162
+ end
1163
+ end
1164
+ end
1165
+
1166
+ context "when the query is 'october 2nd through october 5th'" do
1167
+ let(:query) { "october 2nd through october 5th" }
1168
+ let(:run_date) { Time.local(2008, 9, 18) }
1169
+
1170
+ describe "#occurrences" do
1171
+ it "is every day from October 2nd to October 5th" do
1172
+ expect(n.occurrences).to match_array [
1173
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081005"), interval: 1)
1174
+ ]
1175
+ end
1176
+ end
1177
+ end
1178
+
1179
+ context "when the query is '10/2 to 10/5'" do
1180
+ let(:query) { "10/2 to 10/5" }
1181
+ let(:run_date) { Time.local(2008, 9, 18) }
1182
+
1183
+ describe "#occurrences" do
1184
+ it "is every day from October 2nd to October 5th" do
1185
+ expect(n.occurrences).to match_array [
1186
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081005"), interval: 1)
1187
+ ]
1188
+ end
1189
+ end
1190
+ end
1191
+
1192
+ context "when the query is 'oct 2 until 5'" do
1193
+ let(:query) { "oct 2 until 5" }
1194
+ let(:run_date) { Time.local(2008, 9, 18) }
1195
+
1196
+ describe "#occurrences" do
1197
+ it "is every day from October 2nd to October 5th" do
1198
+ expect(n.occurrences).to match_array [
1199
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081005"), interval: 1)
1200
+ ]
1201
+ end
1202
+ end
1203
+ end
1204
+
1205
+ context "when the query is 'oct 2 until oct 5'" do
1206
+ let(:query) { "oct 2 until oct 5" }
1207
+ let(:run_date) { Time.local(2008, 9, 18) }
1208
+
1209
+ describe "#occurrences" do
1210
+ it "is every day from October 2nd to October 5th" do
1211
+ expect(n.occurrences).to match_array [
1212
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081005"), interval: 1)
1213
+ ]
1214
+ end
1215
+ end
1216
+ end
1217
+
1218
+ context "when the query is 'oct 2-oct 5'" do
1219
+ let(:query) { "oct 2-oct 5" }
1220
+ let(:run_date) { Time.local(2008, 9, 18) }
1221
+
1222
+ describe "#occurrences" do
1223
+ it "is every day from October 2nd to October 5th" do
1224
+ expect(n.occurrences).to match_array [
1225
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081005"), interval: 1)
1226
+ ]
1227
+ end
1228
+ end
1229
+ end
1230
+
1231
+ context "when the query is 'october 2nd-5th'" do
1232
+ let(:query) { "october 2nd-5th" }
1233
+ let(:run_date) { Time.local(2008, 9, 18) }
1234
+
1235
+ describe "#occurrences" do
1236
+ it "is every day from October 2nd to October 5th" do
1237
+ expect(n.occurrences).to match_array [
1238
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081005"), interval: 1)
1239
+ ]
1240
+ end
1241
+ end
1242
+ end
1243
+
1244
+ context "when the query is 'october 2nd-5th from 9 to 5am'" do
1245
+ let(:query) { "october 2nd-5th from 9 to 5am" }
1246
+ let(:run_date) { Time.local(2008, 9, 18) }
1247
+
1248
+ describe "#occurrences" do
1249
+ it "is 9:00am to 5:00pm every day from October 2nd to October 5th" do
1250
+ expect(n.occurrences).to match_array [
1251
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081005"), interval: 1, start_time: Nickel::ZTime.new("21"), end_time: Nickel::ZTime.new("05"))
1252
+ ]
1253
+ end
1254
+ end
1255
+ end
1256
+
1257
+ context "when the query is 'october 2nd-5th every day from 9 to 5am'" do
1258
+ let(:query) { "october 2nd-5th every day from 9 to 5am" }
1259
+ let(:run_date) { Time.local(2008, 9, 18) }
1260
+
1261
+ describe "#occurrences" do
1262
+ it "is 9:00am to 5:00pm every day from October 2nd to October 5th" do
1263
+ expect(n.occurrences).to match_array [
1264
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081005"), interval: 1, start_time: Nickel::ZTime.new("21"), end_time: Nickel::ZTime.new("05"))
1265
+ ]
1266
+ end
1267
+ end
1268
+ end
1269
+
1270
+ context "when the query is 'january 1 from 1PM to 5AM'" do
1271
+ let(:query) { "january 1 from 1PM to 5AM" }
1272
+ let(:run_date) { Time.local(2013, 1, 25) }
1273
+
1274
+ describe "#occurrences" do
1275
+ it "is 1:00pm to 5:00am January 1st" do
1276
+ expect(n.occurrences).to match_array [
1277
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20130101"), start_time: Nickel::ZTime.new("13"), end_time: Nickel::ZTime.new("05"))
1278
+ ]
1279
+ end
1280
+ end
1281
+ end
1282
+
1283
+ context "when the query is 'tuesday, january 1st - friday, february 15, 2013'" do
1284
+ let(:query) { "tuesday, january 1st - friday, february 15, 2013" }
1285
+ let(:run_date) { Time.local(2008, 1, 25) }
1286
+
1287
+ describe "#occurrences" do
1288
+ it "is every day from January 1st to February 15th" do
1289
+ expect(n.occurrences).to match_array [
1290
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20130101"), end_date: Nickel::ZDate.new("20130215"), interval: 1)
1291
+ ]
1292
+ end
1293
+ end
1294
+ end
1295
+
1296
+ context "when the query is 'tuesday, january 1, 2013 - friday, february 15, 2013'" do
1297
+ let(:query) { "tuesday, january 1, 2013 - friday, february 15, 2013" }
1298
+ let(:run_date) { Time.local(2008, 1, 25) }
1299
+
1300
+ describe "#occurrences" do
1301
+ it "is every day from January 1st to February 15th" do
1302
+ expect(n.occurrences).to match_array [
1303
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20130101"), end_date: Nickel::ZDate.new("20130215"), interval: 1)
1304
+ ]
1305
+ end
1306
+ end
1307
+ end
1308
+
1309
+ context "when the query is 'every monday and wednesday'" do
1310
+ let(:query) { "every monday and wednesday" }
1311
+ let(:run_date) { Time.local(2008, 9, 18) }
1312
+
1313
+ describe "#occurrences" do
1314
+ it "is every Monday and Wednesday" do
1315
+ expect(n.occurrences).to match_array [
1316
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 0, interval: 1, start_date: Nickel::ZDate.new("20080922")),
1317
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 2, interval: 1, start_date: Nickel::ZDate.new("20080924"))
1318
+ ]
1319
+ end
1320
+ end
1321
+ end
1322
+
1323
+ context "when the query is 'every other monday and wednesday'" do
1324
+ let(:query) { "every other monday and wednesday" }
1325
+ let(:run_date) { Time.local(2008, 9, 18) }
1326
+
1327
+ describe "#occurrences" do
1328
+ it "is every other Monday and Wednesday" do
1329
+ expect(n.occurrences).to match_array [
1330
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 0, interval: 2, start_date: Nickel::ZDate.new("20080922")),
1331
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 2, interval: 2, start_date: Nickel::ZDate.new("20080924"))
1332
+ ]
1333
+ end
1334
+ end
1335
+ end
1336
+
1337
+ context "when the query is 'every monday'" do
1338
+ let(:query) { "every monday" }
1339
+ let(:run_date) { Time.local(2008, 9, 18) }
1340
+
1341
+ describe "#occurrences" do
1342
+ it "is every Monday" do
1343
+ expect(n.occurrences).to match_array [
1344
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 0, interval: 1, start_date: Nickel::ZDate.new("20080922"))
1345
+ ]
1346
+ end
1347
+ end
1348
+ end
1349
+
1350
+ context "when the query is 'every monday at 2pm and wednesday at 4pm'", broken: true do
1351
+ # FIXME: this spec should have two occurrences
1352
+ let(:query) { "every monday at 2pm and wednesday at 4pm" }
1353
+ let(:run_date) { Time.local(2008, 9, 18) }
1354
+
1355
+ describe "#occurrences" do
1356
+ it "is every Monday at 2:00pm and every Wednesday at 4:00pm" do
1357
+ expect(n.occurrences).to match_array [
1358
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 0, interval: 1, start_date: Nickel::ZDate.new("20080922"), start_time: Nickel::ZTime.new("14")),
1359
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 2, interval: 1, start_date: Nickel::ZDate.new("20080924"), start_time: Nickel::ZTime.new("16"))
1360
+ ]
1361
+ end
1362
+ end
1363
+ end
1364
+
1365
+ context "when the query is 'every monday at 2pm and every wednesday at 4pm'" do
1366
+ let(:query) { "every monday at 2pm and every wednesday at 4pm" }
1367
+ let(:run_date) { Time.local(2008, 9, 18) }
1368
+
1369
+ describe "#occurrences" do
1370
+ it "is every Monday at 2:00pm and every Wednesday at 4:00pm" do
1371
+ expect(n.occurrences).to match_array [
1372
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 0, interval: 1, start_date: Nickel::ZDate.new("20080922"), start_time: Nickel::ZTime.new("14")),
1373
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 2, interval: 1, start_date: Nickel::ZDate.new("20080924"), start_time: Nickel::ZTime.new("16"))
1374
+ ]
1375
+ end
1376
+ end
1377
+ end
1378
+
1379
+ context "when the query is 'every monday every wednesday'" do
1380
+ let(:query) { "every monday every wednesday" }
1381
+ let(:run_date) { Time.local(2008, 9, 18) }
1382
+
1383
+ describe "#occurrences" do
1384
+ it "is every Monday at 2:00pm and every Wednesday at 4:00pm" do
1385
+ expect(n.occurrences).to match_array [
1386
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 0, interval: 1, start_date: Nickel::ZDate.new("20080922")),
1387
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 2, interval: 1, start_date: Nickel::ZDate.new("20080924"))
1388
+ ]
1389
+ end
1390
+ end
1391
+ end
1392
+
1393
+ context "when the query is 'the 22nd of every month'" do
1394
+ let(:query) { "the 22nd of every month" }
1395
+ let(:run_date) { Time.local(2008, 9, 18) }
1396
+
1397
+ describe "#occurrences" do
1398
+ it "is the 22nd of every month" do
1399
+ expect(n.occurrences).to match_array [
1400
+ Nickel::Occurrence.new(type: :datemonthly, date_of_month: 22, interval: 1, start_date: Nickel::ZDate.new("20080922"))
1401
+ ]
1402
+ end
1403
+ end
1404
+ end
1405
+
1406
+ context "when the query is 'the first friday of every month'" do
1407
+ let(:query) { "the first friday of every month" }
1408
+ let(:run_date) { Time.local(2008, 9, 18) }
1409
+
1410
+ describe "#occurrences" do
1411
+ it "is the first friday of every month" do
1412
+ expect(n.occurrences).to match_array [
1413
+ Nickel::Occurrence.new(type: :daymonthly, week_of_month: 1, day_of_week: 4, interval: 1, start_date: Nickel::ZDate.new("20081003"))
1414
+ ]
1415
+ end
1416
+ end
1417
+ end
1418
+
1419
+ context "when the query is 'the second tuesday of every month at 5pm'" do
1420
+ let(:query) { "the second tuesday of every month at 5pm" }
1421
+ let(:run_date) { Time.local(2008, 9, 24) }
1422
+
1423
+ describe "#occurrences" do
1424
+ it "is 5:00pm on the second Tuesday of every month" do
1425
+ expect(n.occurrences).to match_array [
1426
+ Nickel::Occurrence.new(type: :daymonthly, week_of_month: 2, day_of_week: 1, interval: 1, start_date: Nickel::ZDate.new("20081014"), start_time: Nickel::ZTime.new("17"))
1427
+ ]
1428
+ end
1429
+ end
1430
+ end
1431
+
1432
+ context "when the query is 'the first tuesday of every month at 4pm and 5pm, the second tuesday of every month at 5pm'" do
1433
+ let(:query) { "the first tuesday of every month at 4pm and 5pm, the second tuesday of every month at 5pm" }
1434
+ let(:run_date) { Time.local(2008, 9, 24) }
1435
+
1436
+ describe "#occurrences" do
1437
+ it "is 4:00pm to 5:00pm on the first Tuesday of every month and 5:00pm on the second Tuesday of every month" do
1438
+ expect(n.occurrences).to match_array [
1439
+ Nickel::Occurrence.new(type: :daymonthly, week_of_month: 1, day_of_week: 1, interval: 1, start_date: Nickel::ZDate.new("20081007"), start_time: Nickel::ZTime.new("16")),
1440
+ Nickel::Occurrence.new(type: :daymonthly, week_of_month: 1, day_of_week: 1, interval: 1, start_date: Nickel::ZDate.new("20081007"), start_time: Nickel::ZTime.new("17")),
1441
+ Nickel::Occurrence.new(type: :daymonthly, week_of_month: 2, day_of_week: 1, interval: 1, start_date: Nickel::ZDate.new("20081014"), start_time: Nickel::ZTime.new("17"))
1442
+ ]
1443
+ end
1444
+ end
1445
+ end
1446
+
1447
+ context "when the query is 'every sunday in december'" do
1448
+ let(:query) { "every sunday in december" }
1449
+ let(:run_date) { Time.local(2008, 9, 24) }
1450
+
1451
+ describe "#occurrences" do
1452
+ it "is every Sunday in December" do
1453
+ expect(n.occurrences).to match_array [
1454
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 6, interval: 1, start_date: Nickel::ZDate.new("20081207"), end_date: Nickel::ZDate.new("20081228"))
1455
+ ]
1456
+ end
1457
+ end
1458
+ end
1459
+
1460
+ context "when the query is 'every monday until december'" do
1461
+ let(:query) { "every monday until december" }
1462
+ let(:run_date) { Time.local(2008, 9, 24) }
1463
+
1464
+ describe "#occurrences" do
1465
+ it "is every Monday from now until December" do
1466
+ expect(n.occurrences).to match_array [
1467
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 0, interval: 1, start_date: Nickel::ZDate.new("20080929"), end_date: Nickel::ZDate.new("20081124"))
1468
+ ]
1469
+ end
1470
+ end
1471
+ end
1472
+
1473
+ context "when the query is 'every monday next month'" do
1474
+ let(:query) { "every monday next month" }
1475
+ let(:run_date) { Time.local(2008, 9, 24) }
1476
+
1477
+ describe "#occurrences" do
1478
+ it "is every Monday next month" do
1479
+ expect(n.occurrences).to match_array [
1480
+ Nickel::Occurrence.new(type: :weekly, day_of_week: 0, interval: 1, start_date: Nickel::ZDate.new("20081006"), end_date: Nickel::ZDate.new("20081027"))
1481
+ ]
1482
+ end
1483
+ end
1484
+ end
1485
+
1486
+ context "when the query is 'everyday next month'" do
1487
+ let(:query) { "everyday next month" }
1488
+ let(:run_date) { Time.local(2008, 12, 24) }
1489
+
1490
+ describe "#occurrences" do
1491
+ it "is every day next month" do
1492
+ expect(n.occurrences).to match_array [
1493
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20090101"), end_date: Nickel::ZDate.new("20090131"))
1494
+ ]
1495
+ end
1496
+ end
1497
+ end
1498
+
1499
+ context "when the query is 'in the next two days'" do
1500
+ let(:query) { "in the next two days" }
1501
+ let(:run_date) { Time.local(2007, 12, 29) }
1502
+
1503
+ describe "#occurrences" do
1504
+ it "is today, tomorrow and the day after" do
1505
+ expect(n.occurrences).to match_array [
1506
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20071229"), end_date: Nickel::ZDate.new("20071231"))
1507
+ ]
1508
+ end
1509
+ end
1510
+ end
1511
+
1512
+ context "when the query is 'for three days'" do
1513
+ let(:query) { "for three days" }
1514
+ let(:run_date) { Time.local(2007, 12, 29) }
1515
+
1516
+ describe "#occurrences" do
1517
+ it "is today, tomorrow, the day after and the day after that" do
1518
+ expect(n.occurrences).to match_array [
1519
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20071229"), end_date: Nickel::ZDate.new("20080101"))
1520
+ ]
1521
+ end
1522
+ end
1523
+ end
1524
+
1525
+ context "when the query is 'for the next three days'" do
1526
+ let(:query) { "for the next three days" }
1527
+ let(:run_date) { Time.local(2007, 12, 29) }
1528
+
1529
+ describe "#occurrences" do
1530
+ it "is today, tomorrow, the day after and the day after that" do
1531
+ expect(n.occurrences).to match_array [
1532
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20071229"), end_date: Nickel::ZDate.new("20080101"))
1533
+ ]
1534
+ end
1535
+ end
1536
+ end
1537
+
1538
+ context "when the query is 'this week'" do
1539
+ let(:query) { "this week" }
1540
+ let(:run_date) { Time.local(2008, 9, 25) }
1541
+
1542
+ describe "#occurrences" do
1543
+ it "is every day from now until 7 days from now" do
1544
+ expect(n.occurrences).to match_array [
1545
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20080925"), end_date: Nickel::ZDate.new("20081002"))
1546
+ ]
1547
+ end
1548
+ end
1549
+ end
1550
+
1551
+ context "when the query is 'every day this week'" do
1552
+ let(:query) { "every day this week" }
1553
+ let(:run_date) { Time.local(2008, 9, 25) }
1554
+
1555
+ describe "#occurrences" do
1556
+ it "is every day from now until 7 days from now" do
1557
+ expect(n.occurrences).to match_array [
1558
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20080925"), end_date: Nickel::ZDate.new("20081002"))
1559
+ ]
1560
+ end
1561
+ end
1562
+ end
1563
+
1564
+ context "when the query is 'next week'" do
1565
+ let(:query) { "next week" }
1566
+ let(:run_date) { Time.local(2008, 9, 25) }
1567
+
1568
+ describe "#occurrences" do
1569
+ it "is every day from 7 days from now until 14 days from now" do
1570
+ expect(n.occurrences).to match_array [
1571
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081009"))
1572
+ ]
1573
+ end
1574
+ end
1575
+ end
1576
+
1577
+ context "when the query is 'every day next week'" do
1578
+ let(:query) { "every day next week" }
1579
+ let(:run_date) { Time.local(2008, 9, 25) }
1580
+
1581
+ describe "#occurrences" do
1582
+ it "is every day from 7 days from now until 14 days from now" do
1583
+ expect(n.occurrences).to match_array [
1584
+ Nickel::Occurrence.new(type: :daily, interval: 1, start_date: Nickel::ZDate.new("20081002"), end_date: Nickel::ZDate.new("20081009"))
1585
+ ]
1586
+ end
1587
+ end
1588
+ end
1589
+
1590
+ context "when the query is 'all month'" do
1591
+ let(:query) { "all month" }
1592
+ let(:run_date) { Time.local(2008, 10, 5) }
1593
+
1594
+ describe "#occurrences" do
1595
+ it "is every day from now until the last day of the month" do
1596
+ expect(n.occurrences).to match_array [
1597
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081005"), end_date: Nickel::ZDate.new("20081031"), interval: 1)
1598
+ ]
1599
+ end
1600
+ end
1601
+ end
1602
+
1603
+ context "when the query is 'the week of jan 2nd'" do
1604
+ let(:query) { "the week of jan 2nd" }
1605
+ let(:run_date) { Time.local(2008, 12, 21) }
1606
+
1607
+ describe "#occurrences" do
1608
+ it "is every day in the 7 days starting on January 2nd" do
1609
+ expect(n.occurrences).to match_array [
1610
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20090102"), end_date: Nickel::ZDate.new("20090109"), interval: 1)
1611
+ ]
1612
+ end
1613
+ end
1614
+ end
1615
+
1616
+ context "when the query is 'the week ending jan 2nd'" do
1617
+ let(:query) { "the week ending jan 2nd" }
1618
+ let(:run_date) { Time.local(2008, 12, 21) }
1619
+
1620
+ describe "#occurrences" do
1621
+ it "is every day in the 7 days preceeding January 2nd" do
1622
+ expect(n.occurrences).to match_array [
1623
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081226"), end_date: Nickel::ZDate.new("20090102"), interval: 1)
1624
+ ]
1625
+ end
1626
+ end
1627
+ end
1628
+
1629
+ context "when the query is 'the week of the 22nd'" do
1630
+ let(:query) { "the week of the 22nd" }
1631
+ let(:run_date) { Time.local(2008, 12, 21) }
1632
+
1633
+ describe "#occurrences" do
1634
+ it "is every day in the 7 days starting on the 22nd of this month" do
1635
+ expect(n.occurrences).to match_array [
1636
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081222"), end_date: Nickel::ZDate.new("20081229"), interval: 1)
1637
+ ]
1638
+ end
1639
+ end
1640
+ end
1641
+
1642
+ context "when the query is 'this monday, wednesday, friday and saturday'" do
1643
+ let(:query) { "this monday, wednesday, friday and saturday" }
1644
+ let(:run_date) { Time.local(2014, 2, 9) }
1645
+
1646
+ describe "#occurrences" do
1647
+ it "is the following Monday, Wednesday, Friday and Saturday" do
1648
+ expect(n.occurrences).to match_array [
1649
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140210")),
1650
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140212")),
1651
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140214")),
1652
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140215"))
1653
+ ]
1654
+ end
1655
+ end
1656
+ end
1657
+
1658
+ context "when the query is 'monday, wednesday, friday and saturday'" do
1659
+ let(:query) { "monday, wednesday, friday and saturday" }
1660
+ let(:run_date) { Time.local(2014, 2, 9) }
1661
+
1662
+ describe "#occurrences" do
1663
+ it "is the following Monday, Wednesday, Friday and Saturday" do
1664
+ expect(n.occurrences).to match_array [
1665
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140210")),
1666
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140212")),
1667
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140214")),
1668
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140215"))
1669
+ ]
1670
+ end
1671
+ end
1672
+ end
1673
+
1674
+ context "when the query is 'next monday, wednesday, friday and saturday'" do
1675
+ let(:query) { "next monday, wednesday, friday and saturday" }
1676
+ let(:run_date) { Time.local(2014, 2, 9) }
1677
+
1678
+ describe "#occurrences" do
1679
+ it "is the next Monday, Wednesday, Friday and Saturday" do
1680
+ expect(n.occurrences).to match_array [
1681
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140217")),
1682
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140219")),
1683
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140221")),
1684
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20140222"))
1685
+ ]
1686
+ end
1687
+ end
1688
+ end
1689
+
1690
+ context "when the query is 'october 2nd, 2009'" do
1691
+ let(:query) { "october 2nd, 2009" }
1692
+ let(:run_date) { Time.local(2008, 1, 1) }
1693
+
1694
+ describe "#occurrences" do
1695
+ it "is October 2nd 2009" do
1696
+ expect(n.occurrences).to match_array [
1697
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20091002"))
1698
+ ]
1699
+ end
1700
+ end
1701
+ end
1702
+
1703
+ context "when the query is 'April 29, 5-8pm'" do
1704
+ let(:query) { "April 29, 5-8pm" }
1705
+ let(:run_date) { Time.local(2008, 3, 30) }
1706
+
1707
+ describe "#occurrences" do
1708
+ it "is 5:00pm to 8:00pm on April 29th" do
1709
+ expect(n.occurrences).to match_array [
1710
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20080429"), start_time: Nickel::ZTime.new("17"),end_time: Nickel::ZTime.new("20"))
1711
+ ]
1712
+ end
1713
+ end
1714
+ end
1715
+
1716
+ context "when the query is 'the first of each month'" do
1717
+ let(:query) { "the first of each month" }
1718
+ let(:run_date) { Time.local(2008, 1, 1) }
1719
+
1720
+ describe "#occurrences" do
1721
+ it "is every 1st of the month starting next month" do
1722
+ expect(n.occurrences).to match_array [
1723
+ Nickel::Occurrence.new(type: :datemonthly, start_date: Nickel::ZDate.new("20080101"), interval: 1, date_of_month: 1)
1724
+ ]
1725
+ end
1726
+ end
1727
+ end
1728
+
1729
+ context "when the query is 'the first of each month'" do
1730
+ let(:query) { "the first of each month" }
1731
+ let(:run_date) { Time.local(2009, 2, 15) }
1732
+
1733
+ describe "#occurrences" do
1734
+ it "is every 1st of the month starting next month" do
1735
+ expect(n.occurrences).to match_array [
1736
+ Nickel::Occurrence.new(type: :datemonthly, start_date: Nickel::ZDate.new("20090301"), interval: 1, date_of_month: 1)
1737
+ ]
1738
+ end
1739
+ end
1740
+ end
1741
+
1742
+ context "when the query is 'every sunday'" do
1743
+ let(:query) { "every sunday" }
1744
+ let(:run_date) { Time.local(2008, 12, 30) }
1745
+
1746
+ describe "#occurrences" do
1747
+ it "is every sunday" do
1748
+ expect(n.occurrences).to match_array [
1749
+ Nickel::Occurrence.new(type: :weekly, start_date: Nickel::ZDate.new("20090104"), interval: 1, day_of_week: 6)
1750
+ ]
1751
+ end
1752
+ end
1753
+ end
1754
+
1755
+ context "when the query is 'every month on the 22nd at 2pm'" do
1756
+ let(:query) { "every month on the 22nd at 2pm" }
1757
+ let(:run_date) { Time.local(2008, 12, 30) }
1758
+
1759
+ describe "#occurrences" do
1760
+ it "is every month on the 22nd at 2:00pm" do
1761
+ expect(n.occurrences).to match_array [
1762
+ Nickel::Occurrence.new(type: :datemonthly, start_date: Nickel::ZDate.new("20090122"), interval: 1, date_of_month: 22, start_time: Nickel::ZTime.new("14"))
1763
+ ]
1764
+ end
1765
+ end
1766
+ end
1767
+
1768
+ context "when the query is 'every other saturday at noon'" do
1769
+ let(:query) { "every other saturday at noon" }
1770
+ let(:run_date) { Time.local(2008, 12, 30) }
1771
+
1772
+ describe "#occurrences" do
1773
+ it "is every 2nd Saturday at 12:00pm" do
1774
+ expect(n.occurrences).to match_array [
1775
+ Nickel::Occurrence.new(type: :weekly, start_date: Nickel::ZDate.new("20090103"), interval: 2, day_of_week: 5, start_time: Nickel::ZTime.new("12"))
1776
+ ]
1777
+ end
1778
+ end
1779
+ end
1780
+
1781
+ context "when the query is 'every day at midnight'" do
1782
+ let(:query) { "every day at midnight" }
1783
+ let(:run_date) { Time.local(2008, 12, 30) }
1784
+
1785
+ describe "#occurrences" do
1786
+ it "is every day at 12:00am" do
1787
+ expect(n.occurrences).to match_array [
1788
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081230"), interval: 1, start_time: Nickel::ZTime.new("00"))
1789
+ ]
1790
+ end
1791
+ end
1792
+ end
1793
+
1794
+ context "when the query is 'daily from noon to midnight'" do
1795
+ let(:query) { "daily from noon to midnight" }
1796
+ let(:run_date) { Time.local(2008, 12, 30) }
1797
+
1798
+ describe "#occurrences" do
1799
+ it "is every day from 12:00pm to 12:00am" do
1800
+ expect(n.occurrences).to match_array [
1801
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081230"), interval: 1, start_time: Nickel::ZTime.new("12"), end_time: Nickel::ZTime.new("00"))
1802
+ ]
1803
+ end
1804
+ end
1805
+ end
1806
+
1807
+ context "when the query is 'the last tuesday of every month, starts at 9am'" do
1808
+ let(:query) { "the last tuesday of every month, starts at 9am" }
1809
+ let(:run_date) { Time.local(2008, 12, 30) }
1810
+
1811
+ describe "#occurrences" do
1812
+ it "is the last Tuesday of every month at 9:00am" do
1813
+ expect(n.occurrences).to match_array [
1814
+ Nickel::Occurrence.new(type: :daymonthly, start_date: Nickel::ZDate.new("20081230"), start_time: Nickel::ZTime.new("09"), interval: 1, week_of_month: -1, day_of_week: 1)
1815
+ ]
1816
+ end
1817
+ end
1818
+ end
1819
+
1820
+ context "when the query is 'one week from today'" do
1821
+ let(:query) { "one week from today" }
1822
+ let(:run_date) { Time.local(2008, 12, 30) }
1823
+
1824
+ describe "#occurrences" do
1825
+ it "is one week from today" do
1826
+ expect(n.occurrences).to match_array [
1827
+ Nickel::Occurrence.new(type: :single, start_date: Nickel::ZDate.new("20090106"))
1828
+ ]
1829
+ end
1830
+ end
1831
+ end
1832
+
1833
+ context "when the query is 'every other day at 2:45am'" do
1834
+ let(:query) { "every other day at 2:45am" }
1835
+ let(:run_date) { Time.local(2008, 12, 30) }
1836
+
1837
+ describe "#occurrences" do
1838
+ it "is every other day at 2:45am" do
1839
+ expect(n.occurrences).to match_array [
1840
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081230"), start_time: Nickel::ZTime.new("0245"),interval: 2)
1841
+ ]
1842
+ end
1843
+ end
1844
+ end
1845
+
1846
+ context "when the query is 'every other day at 2:45am starting tomorrow'" do
1847
+ let(:query) { "every other day at 2:45am starting tomorrow" }
1848
+ let(:run_date) { Time.local(2008, 12, 30) }
1849
+
1850
+ describe "#occurrences" do
1851
+ it "is every other day at 2:45am starting from tomorrow" do
1852
+ expect(n.occurrences).to match_array [
1853
+ Nickel::Occurrence.new(type: :daily, start_date: Nickel::ZDate.new("20081231"), start_time: Nickel::ZTime.new("0245"), interval: 2)
1854
+ ]
1855
+ end
1856
+ end
1857
+ end
1858
+ end
1859
+ end