chronological 0.0.6 → 0.0.7

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.
@@ -58,15 +58,15 @@ module Chronological
58
58
  in_progress.any?
59
59
  end
60
60
 
61
+ ###
62
+ # Aliases
63
+ #
64
+ # Aliasing date methods to make code more readable
61
65
  instance_eval do
62
66
  alias active? in_progress?
63
67
  alias active in_progress
64
68
  end
65
69
 
66
- ###
67
- # Aliases
68
- #
69
- # Aliasing date methods to make code more readable
70
70
  class_eval do
71
71
  alias_attribute :"starts_at#{start_time_field_utc_suffix}", start_time_field.to_sym
72
72
  alias_attribute :"starting_at#{start_time_field_utc_suffix}", start_time_field.to_sym
@@ -31,6 +31,26 @@ module Chronological
31
31
  send(base_time_field).present? || send(options[:start]).present? || send(options[:end]).present?
32
32
  end
33
33
 
34
+ ###
35
+ # Scopes
36
+ #
37
+ self.class.send(:define_method, :in_progress) do
38
+ all.select(&:in_progress?)
39
+ end
40
+
41
+ self.class.send(:define_method, :in_progress?) do
42
+ all.any?(&:in_progress?)
43
+ end
44
+
45
+ ###
46
+ # Aliases
47
+ #
48
+ # Aliasing date methods to make code more readable
49
+ instance_eval do
50
+ alias active? in_progress?
51
+ alias active in_progress
52
+ end
53
+
34
54
  base_timeframe start_date_field: start_date_field,
35
55
  start_time_field: start_time_field,
36
56
  end_date_field: end_date_field,
@@ -1,3 +1,3 @@
1
1
  module Chronological
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -3,43 +3,28 @@ require 'spec_helper'
3
3
  class AbsoluteChronologicable < ActiveRecord::Base
4
4
  include Chronological::AbsoluteTimeframe
5
5
 
6
- absolute_timeframe :start_utc => :started_at_utc,
7
- :end_utc => :ended_at_utc
6
+ absolute_timeframe start_utc: :started_at_utc,
7
+ end_utc: :ended_at_utc
8
8
  end
9
9
 
10
10
  class ChronologicableWithTimeZone < ActiveRecord::Base
11
11
  include Chronological::AbsoluteTimeframe
12
12
 
13
- absolute_timeframe :start_utc => :started_at_utc,
14
- :end_utc => :ended_at_utc,
15
- :time_zone => :time_zone
13
+ absolute_timeframe start_utc: :started_at_utc,
14
+ end_utc: :ended_at_utc,
15
+ time_zone: :time_zone
16
16
  end
17
17
 
18
18
  describe Chronological::AbsoluteTimeframe, :timecop => true do
19
- let(:later) { Time.local(2012, 7, 26, 6, 0, 26) }
20
- let(:now) { Time.local(2012, 7, 26, 6, 0, 25) }
21
- let(:past) { Time.local(2012, 7, 26, 6, 0, 24) }
19
+ let(:later) { Time.local(2012, 7, 26, 6, 0, 26) }
20
+ let(:now) { Time.local(2012, 7, 26, 6, 0, 25) }
21
+ let(:past) { Time.local(2012, 7, 26, 6, 0, 24) }
22
22
 
23
- before { Timecop.freeze(now) }
23
+ let(:start_time) { nil }
24
+ let(:end_time) { nil }
25
+ let(:time_zone) { nil }
24
26
 
25
- let(:chronologicable) do
26
- AbsoluteChronologicable.create(
27
- :started_at_utc => start_time,
28
- :ended_at_utc => end_time)
29
- end
30
-
31
- let(:chronologicable_without_enabled_time_zone) do
32
- AbsoluteChronologicable.new(
33
- :started_at_utc => start_time,
34
- :ended_at_utc => end_time)
35
- end
36
-
37
- let(:chronologicable_with_enabled_time_zone) do
38
- ChronologicableWithTimeZone.new(
39
- :started_at_utc => start_time,
40
- :ended_at_utc => end_time,
41
- :time_zone => time_zone)
42
- end
27
+ before { Timecop.freeze(now) }
43
28
 
44
29
  it { AbsoluteChronologicable.new.respond_to?(:starts_at_utc).should be_true }
45
30
  it { AbsoluteChronologicable.new.respond_to?(:starting_at_utc).should be_true }
@@ -130,95 +115,169 @@ describe Chronological::AbsoluteTimeframe, :timecop => true do
130
115
  end
131
116
  end
132
117
 
133
- context 'when a start time is set' do
134
- let(:start_time) { Time.now }
118
+ context 'when dealing with one chronologicable' do
119
+ let!(:chronologicable) do
120
+ AbsoluteChronologicable.create(
121
+ started_at_utc: start_time,
122
+ ended_at_utc: end_time)
123
+ end
135
124
 
136
- context 'but no end time is set' do
137
- let(:end_time) { nil }
125
+ let!(:chronologicable_without_enabled_time_zone) do
126
+ AbsoluteChronologicable.new(
127
+ started_at_utc: start_time,
128
+ ended_at_utc: end_time)
129
+ end
138
130
 
139
- context 'and no time zone is set' do
140
- let(:time_zone) { nil }
131
+ let!(:chronologicable_with_enabled_time_zone) do
132
+ ChronologicableWithTimeZone.new(
133
+ started_at_utc: start_time,
134
+ ended_at_utc: end_time,
135
+ time_zone: time_zone)
136
+ end
141
137
 
142
- describe '#scheduled?' do
143
- it 'is correct' do
144
- chronologicable_without_enabled_time_zone.should_not be_scheduled
145
- chronologicable_with_enabled_time_zone.should_not be_scheduled
138
+ context 'when a start time is set' do
139
+ let(:start_time) { Time.now }
140
+
141
+ context 'but no end time is set' do
142
+ let(:end_time) { nil }
143
+
144
+ context 'and no time zone is set' do
145
+ let(:time_zone) { nil }
146
+
147
+ describe '#scheduled?' do
148
+ it 'is correct' do
149
+ chronologicable_without_enabled_time_zone.should_not be_scheduled
150
+ chronologicable_with_enabled_time_zone.should_not be_scheduled
151
+ end
152
+ end
153
+
154
+ describe '#partially_scheduled?' do
155
+ it 'is correct' do
156
+ chronologicable_without_enabled_time_zone.should be_partially_scheduled
157
+ chronologicable_with_enabled_time_zone.should be_partially_scheduled
158
+ end
146
159
  end
147
160
  end
148
161
 
149
- describe '#partially_scheduled?' do
150
- it 'is correct' do
151
- chronologicable_without_enabled_time_zone.should be_partially_scheduled
152
- chronologicable_with_enabled_time_zone.should be_partially_scheduled
162
+ context 'and a time zone is set' do
163
+ let(:time_zone) { ActiveSupport::TimeZone.new('Alaska') }
164
+
165
+ describe '#scheduled?' do
166
+ it 'is correct' do
167
+ chronologicable_without_enabled_time_zone.should_not be_scheduled
168
+ chronologicable_with_enabled_time_zone.should_not be_scheduled
169
+ end
170
+ end
171
+
172
+ describe '#partially_scheduled?' do
173
+ it 'is correct' do
174
+ chronologicable_without_enabled_time_zone.should be_partially_scheduled
175
+ chronologicable_with_enabled_time_zone.should be_partially_scheduled
176
+ end
153
177
  end
154
178
  end
155
179
  end
156
180
 
157
- context 'and a time zone is set' do
158
- let(:time_zone) { ActiveSupport::TimeZone.new('Alaska') }
181
+ context 'an end time is set' do
182
+ let(:end_time) { Time.now }
159
183
 
160
- describe '#scheduled?' do
161
- it 'is correct' do
162
- chronologicable_without_enabled_time_zone.should_not be_scheduled
163
- chronologicable_with_enabled_time_zone.should_not be_scheduled
184
+ context 'but no time zone is set' do
185
+ let(:time_zone) { nil }
186
+
187
+ describe '#scheduled?' do
188
+ it 'is correct' do
189
+ chronologicable_without_enabled_time_zone.should be_scheduled
190
+ chronologicable_with_enabled_time_zone.should_not be_scheduled
191
+ end
192
+ end
193
+
194
+ describe '#partially_scheduled?' do
195
+ it 'is correct' do
196
+ chronologicable_without_enabled_time_zone.should be_partially_scheduled
197
+ chronologicable_with_enabled_time_zone.should be_partially_scheduled
198
+ end
164
199
  end
165
200
  end
166
201
 
167
- describe '#partially_scheduled?' do
168
- it 'is correct' do
169
- chronologicable_without_enabled_time_zone.should be_partially_scheduled
170
- chronologicable_with_enabled_time_zone.should be_partially_scheduled
202
+ context 'and a time zone is set' do
203
+ let(:time_zone) { ActiveSupport::TimeZone.new('Alaska') }
204
+
205
+ describe '#scheduled?' do
206
+ it 'is correct' do
207
+ chronologicable_without_enabled_time_zone.should be_scheduled
208
+ chronologicable_with_enabled_time_zone.should be_scheduled
209
+ end
210
+ end
211
+
212
+ describe '#partially_scheduled?' do
213
+ it 'is correct' do
214
+ chronologicable_without_enabled_time_zone.should be_partially_scheduled
215
+ chronologicable_with_enabled_time_zone.should be_partially_scheduled
216
+ end
171
217
  end
172
218
  end
173
219
  end
174
220
  end
175
221
 
176
- context 'an end time is set' do
222
+ context 'when an end time is set' do
177
223
  let(:end_time) { Time.now }
178
224
 
179
- context 'but no time zone is set' do
180
- let(:time_zone) { nil }
225
+ context 'but no start time is set' do
226
+ let(:start_time) { nil }
181
227
 
182
228
  describe '#scheduled?' do
183
- it 'is correct' do
184
- chronologicable_without_enabled_time_zone.should be_scheduled
185
- chronologicable_with_enabled_time_zone.should_not be_scheduled
229
+ it 'is false' do
230
+ chronologicable.should_not be_scheduled
186
231
  end
187
232
  end
188
233
 
189
234
  describe '#partially_scheduled?' do
190
- it 'is correct' do
191
- chronologicable_without_enabled_time_zone.should be_partially_scheduled
192
- chronologicable_with_enabled_time_zone.should be_partially_scheduled
235
+ it 'is true' do
236
+ chronologicable.should be_partially_scheduled
193
237
  end
194
238
  end
195
- end
196
239
 
197
- context 'and a time zone is set' do
198
- let(:time_zone) { ActiveSupport::TimeZone.new('Alaska') }
240
+ context 'but no time zone is set' do
241
+ let(:time_zone) { nil }
199
242
 
200
- describe '#scheduled?' do
201
- it 'is correct' do
202
- chronologicable_without_enabled_time_zone.should be_scheduled
203
- chronologicable_with_enabled_time_zone.should be_scheduled
243
+ describe '#scheduled?' do
244
+ it 'is correct' do
245
+ chronologicable_without_enabled_time_zone.should_not be_scheduled
246
+ chronologicable_with_enabled_time_zone.should_not be_scheduled
247
+ end
248
+ end
249
+
250
+ describe '#partially_scheduled?' do
251
+ it 'is correct' do
252
+ chronologicable_without_enabled_time_zone.should be_partially_scheduled
253
+ chronologicable_with_enabled_time_zone.should be_partially_scheduled
254
+ end
204
255
  end
205
256
  end
206
257
 
207
- describe '#partially_scheduled?' do
208
- it 'is correct' do
209
- chronologicable_without_enabled_time_zone.should be_partially_scheduled
210
- chronologicable_with_enabled_time_zone.should be_partially_scheduled
258
+ context 'and a time zone is set' do
259
+ let(:time_zone) { ActiveSupport::TimeZone.new('Alaska') }
260
+
261
+ describe '#scheduled?' do
262
+ it 'is correct' do
263
+ chronologicable_without_enabled_time_zone.should_not be_scheduled
264
+ chronologicable_with_enabled_time_zone.should_not be_scheduled
265
+ end
266
+ end
267
+
268
+ describe '#partially_scheduled?' do
269
+ it 'is correct' do
270
+ chronologicable_without_enabled_time_zone.should be_partially_scheduled
271
+ chronologicable_with_enabled_time_zone.should be_partially_scheduled
272
+ end
211
273
  end
212
274
  end
213
275
  end
214
276
  end
215
- end
216
277
 
217
- context 'when an end time is set' do
218
- let(:end_time) { Time.now }
219
-
220
- context 'but no start time is set' do
278
+ context 'when neither a start time nor an end time is set' do
221
279
  let(:start_time) { nil }
280
+ let(:end_time) { nil }
222
281
 
223
282
  describe '#scheduled?' do
224
283
  it 'is false' do
@@ -227,220 +286,197 @@ describe Chronological::AbsoluteTimeframe, :timecop => true do
227
286
  end
228
287
 
229
288
  describe '#partially_scheduled?' do
230
- it 'is true' do
231
- chronologicable.should be_partially_scheduled
289
+ it 'is false' do
290
+ chronologicable.should_not be_partially_scheduled
232
291
  end
233
292
  end
293
+ end
234
294
 
235
- context 'but no time zone is set' do
236
- let(:time_zone) { nil }
295
+ context 'when there is a chronologicable that has already started' do
296
+ let(:start_time) { past }
237
297
 
238
- describe '#scheduled?' do
239
- it 'is correct' do
240
- chronologicable_without_enabled_time_zone.should_not be_scheduled
241
- chronologicable_with_enabled_time_zone.should_not be_scheduled
298
+ context 'and has already ended' do
299
+ let(:end_time) { past }
300
+
301
+ describe '.in_progress?' do
302
+ it 'is false' do
303
+ AbsoluteChronologicable.should_not be_in_progress
242
304
  end
243
305
  end
244
306
 
245
- describe '#partially_scheduled?' do
246
- it 'is correct' do
247
- chronologicable_without_enabled_time_zone.should be_partially_scheduled
248
- chronologicable_with_enabled_time_zone.should be_partially_scheduled
307
+ describe '.expired' do
308
+ it 'includes that chronologicable' do
309
+ AbsoluteChronologicable.expired.should include chronologicable
249
310
  end
250
311
  end
251
- end
252
312
 
253
- context 'and a time zone is set' do
254
- let(:time_zone) { ActiveSupport::TimeZone.new('Alaska') }
255
-
256
- describe '#scheduled?' do
257
- it 'is correct' do
258
- chronologicable_without_enabled_time_zone.should_not be_scheduled
259
- chronologicable_with_enabled_time_zone.should_not be_scheduled
313
+ describe '.started' do
314
+ it 'includes that chronologicable' do
315
+ AbsoluteChronologicable.started.should include chronologicable
260
316
  end
261
317
  end
262
318
 
263
- describe '#partially_scheduled?' do
264
- it 'is correct' do
265
- chronologicable_without_enabled_time_zone.should be_partially_scheduled
266
- chronologicable_with_enabled_time_zone.should be_partially_scheduled
319
+ describe '.current' do
320
+ it 'does not include that chronologicable' do
321
+ AbsoluteChronologicable.current.should_not include chronologicable
267
322
  end
268
323
  end
269
- end
270
- end
271
- end
272
324
 
273
- context 'when neither a start time nor an end time is set' do
274
- let(:start_time) { nil }
275
- let(:end_time) { nil }
276
-
277
- describe '#scheduled?' do
278
- it 'is false' do
279
- chronologicable.should_not be_scheduled
280
- end
281
- end
282
-
283
- describe '#partially_scheduled?' do
284
- it 'is false' do
285
- chronologicable.should_not be_partially_scheduled
325
+ describe '.in_progress' do
326
+ it 'does not include that chronologicable' do
327
+ AbsoluteChronologicable.in_progress.should_not include chronologicable
328
+ end
329
+ end
286
330
  end
287
- end
288
- end
289
331
 
290
- context 'when there is a chronologicable that has already started' do
291
- let(:start_time) { past }
332
+ context 'and ends now' do
333
+ let(:end_time) { now }
292
334
 
293
- context 'and has already ended' do
294
- let(:end_time) { past }
295
-
296
- describe '.in_progress?' do
297
- it 'is false' do
298
- chronologicable
299
- AbsoluteChronologicable.should_not be_in_progress
335
+ describe '.in_progress?' do
336
+ it 'is false' do
337
+ AbsoluteChronologicable.should_not be_in_progress
338
+ end
300
339
  end
301
- end
302
340
 
303
- describe '.expired' do
304
- it 'includes that chronologicable' do
305
- AbsoluteChronologicable.expired.should include chronologicable
341
+ describe '.expired' do
342
+ it 'does include that chronologicable' do
343
+ AbsoluteChronologicable.expired.should include chronologicable
344
+ end
306
345
  end
307
- end
308
346
 
309
- describe '.started' do
310
- it 'includes that chronologicable' do
311
- AbsoluteChronologicable.started.should include chronologicable
347
+ describe '.started' do
348
+ it 'includes that chronologicable' do
349
+ AbsoluteChronologicable.started.should include chronologicable
350
+ end
312
351
  end
313
- end
314
352
 
315
- describe '.current' do
316
- it 'does not include that chronologicable' do
317
- AbsoluteChronologicable.current.should_not include chronologicable
353
+ describe '.current' do
354
+ it 'does not include that chronologicable' do
355
+ AbsoluteChronologicable.current.should_not include chronologicable
356
+ end
318
357
  end
319
- end
320
358
 
321
- describe '.in_progress' do
322
- it 'does not include that chronologicable' do
323
- AbsoluteChronologicable.in_progress.should_not include chronologicable
359
+ describe '.in_progress' do
360
+ it 'does not include that chronologicable' do
361
+ AbsoluteChronologicable.in_progress.should_not include chronologicable
362
+ end
324
363
  end
325
364
  end
326
- end
327
365
 
328
- context 'and ends now' do
329
- let(:end_time) { now }
366
+ context 'and ends later' do
367
+ let(:end_time) { later }
330
368
 
331
- describe '.in_progress?' do
332
- it 'is false' do
333
- chronologicable
334
- AbsoluteChronologicable.should_not be_in_progress
369
+ describe '.in_progress?' do
370
+ it 'is true' do
371
+ AbsoluteChronologicable.should be_in_progress
372
+ end
335
373
  end
336
- end
337
374
 
338
- describe '.expired' do
339
- it 'does include that chronologicable' do
340
- AbsoluteChronologicable.expired.should include chronologicable
375
+ describe '.expired' do
376
+ it 'does not include that chronologicable' do
377
+ AbsoluteChronologicable.expired.should_not include chronologicable
378
+ end
341
379
  end
342
- end
343
380
 
344
- describe '.started' do
345
- it 'includes that chronologicable' do
346
- AbsoluteChronologicable.started.should include chronologicable
381
+ describe '.started' do
382
+ it 'includes that chronologicable' do
383
+ AbsoluteChronologicable.started.should include chronologicable
384
+ end
347
385
  end
348
- end
349
386
 
350
- describe '.current' do
351
- it 'does not include that chronologicable' do
352
- AbsoluteChronologicable.current.should_not include chronologicable
387
+ describe '.current' do
388
+ it 'includes that chronologicable' do
389
+ AbsoluteChronologicable.current.should include chronologicable
390
+ end
353
391
  end
354
- end
355
392
 
356
- describe '.in_progress' do
357
- it 'does not include that chronologicable' do
358
- AbsoluteChronologicable.in_progress.should_not include chronologicable
393
+ describe '.in_progress' do
394
+ it 'includes that chronologicable' do
395
+ AbsoluteChronologicable.in_progress.should include chronologicable
396
+ end
359
397
  end
360
398
  end
361
399
  end
362
400
 
363
- context 'and ends later' do
364
- let(:end_time) { later }
401
+ context 'when there is a chronologicable that starts now' do
402
+ let(:start_time) { now }
365
403
 
366
- describe '.in_progress?' do
367
- it 'is true' do
368
- chronologicable
369
- AbsoluteChronologicable.should be_in_progress
404
+ context 'and ends now' do
405
+ let(:end_time) { now }
406
+
407
+ describe '.in_progress?' do
408
+ it 'is false' do
409
+ AbsoluteChronologicable.should_not be_in_progress
410
+ end
370
411
  end
371
- end
372
412
 
373
- describe '.expired' do
374
- it 'does not include that chronologicable' do
375
- AbsoluteChronologicable.expired.should_not include chronologicable
413
+ describe '.expired' do
414
+ it 'does include that chronologicable' do
415
+ AbsoluteChronologicable.expired.should include chronologicable
416
+ end
376
417
  end
377
- end
378
418
 
379
- describe '.started' do
380
- it 'includes that chronologicable' do
381
- AbsoluteChronologicable.started.should include chronologicable
419
+ describe '.started' do
420
+ it 'includes that chronologicable' do
421
+ AbsoluteChronologicable.started.should include chronologicable
422
+ end
382
423
  end
383
- end
384
424
 
385
- describe '.current' do
386
- it 'includes that chronologicable' do
387
- AbsoluteChronologicable.current.should include chronologicable
425
+ describe '.current' do
426
+ it 'does not include that chronologicable' do
427
+ AbsoluteChronologicable.current.should_not include chronologicable
428
+ end
388
429
  end
389
- end
390
430
 
391
- describe '.in_progress' do
392
- it 'includes that chronologicable' do
393
- AbsoluteChronologicable.in_progress.should include chronologicable
431
+ describe '.in_progress' do
432
+ it 'does not include that chronologicable' do
433
+ AbsoluteChronologicable.in_progress.should_not include chronologicable
434
+ end
394
435
  end
395
436
  end
396
- end
397
- end
398
-
399
- context 'when there is a chronologicable that starts now' do
400
- let(:start_time) { now }
401
437
 
402
- context 'and ends now' do
403
- let(:end_time) { now }
438
+ context 'and ends later' do
439
+ let(:end_time) { later }
404
440
 
405
- describe '.in_progress?' do
406
- it 'is false' do
407
- chronologicable
408
- AbsoluteChronologicable.should_not be_in_progress
441
+ describe '.in_progress?' do
442
+ it 'is true' do
443
+ AbsoluteChronologicable.should be_in_progress
444
+ end
409
445
  end
410
- end
411
446
 
412
- describe '.expired' do
413
- it 'does include that chronologicable' do
414
- AbsoluteChronologicable.expired.should include chronologicable
447
+ describe '.expired' do
448
+ it 'does not include that chronologicable' do
449
+ AbsoluteChronologicable.expired.should_not include chronologicable
450
+ end
415
451
  end
416
- end
417
452
 
418
- describe '.started' do
419
- it 'includes that chronologicable' do
420
- AbsoluteChronologicable.started.should include chronologicable
453
+ describe '.started' do
454
+ it 'includes that chronologicable' do
455
+ AbsoluteChronologicable.started.should include chronologicable
456
+ end
421
457
  end
422
- end
423
458
 
424
- describe '.current' do
425
- it 'does not include that chronologicable' do
426
- AbsoluteChronologicable.current.should_not include chronologicable
459
+ describe '.current' do
460
+ it 'includes that chronologicable' do
461
+ AbsoluteChronologicable.current.should include chronologicable
462
+ end
427
463
  end
428
- end
429
464
 
430
- describe '.in_progress' do
431
- it 'does not include that chronologicable' do
432
- AbsoluteChronologicable.in_progress.should_not include chronologicable
465
+ describe '.in_progress' do
466
+ it 'includes that chronologicable' do
467
+ AbsoluteChronologicable.in_progress.should include chronologicable
468
+ end
433
469
  end
434
470
  end
435
471
  end
436
472
 
437
- context 'and ends later' do
438
- let(:end_time) { later }
473
+ context 'when there is a chronologicable that has not yet started' do
474
+ let(:start_time) { later }
475
+ let(:end_time) { later }
439
476
 
440
477
  describe '.in_progress?' do
441
- it 'is true' do
442
- chronologicable
443
- AbsoluteChronologicable.should be_in_progress
478
+ it 'is false' do
479
+ AbsoluteChronologicable.should_not be_in_progress
444
480
  end
445
481
  end
446
482
 
@@ -451,8 +487,8 @@ describe Chronological::AbsoluteTimeframe, :timecop => true do
451
487
  end
452
488
 
453
489
  describe '.started' do
454
- it 'includes that chronologicable' do
455
- AbsoluteChronologicable.started.should include chronologicable
490
+ it 'does not include that chronologicable' do
491
+ AbsoluteChronologicable.started.should_not include chronologicable
456
492
  end
457
493
  end
458
494
 
@@ -463,46 +499,10 @@ describe Chronological::AbsoluteTimeframe, :timecop => true do
463
499
  end
464
500
 
465
501
  describe '.in_progress' do
466
- it 'includes that chronologicable' do
467
- AbsoluteChronologicable.in_progress.should include chronologicable
502
+ it 'does not include that chronologicable' do
503
+ AbsoluteChronologicable.in_progress.should_not include chronologicable
468
504
  end
469
505
  end
470
506
  end
471
507
  end
472
-
473
- context 'when there is a chronologicable that has not yet started' do
474
- let(:start_time) { later }
475
- let(:end_time) { later }
476
-
477
- describe '.in_progress?' do
478
- it 'is false' do
479
- chronologicable
480
- AbsoluteChronologicable.should_not be_in_progress
481
- end
482
- end
483
-
484
- describe '.expired' do
485
- it 'does not include that chronologicable' do
486
- AbsoluteChronologicable.expired.should_not include chronologicable
487
- end
488
- end
489
-
490
- describe '.started' do
491
- it 'does not include that chronologicable' do
492
- AbsoluteChronologicable.started.should_not include chronologicable
493
- end
494
- end
495
-
496
- describe '.current' do
497
- it 'includes that chronologicable' do
498
- AbsoluteChronologicable.current.should include chronologicable
499
- end
500
- end
501
-
502
- describe '.in_progress' do
503
- it 'does not include that chronologicable' do
504
- AbsoluteChronologicable.in_progress.should_not include chronologicable
505
- end
506
- end
507
- end
508
508
  end
@@ -3,97 +3,157 @@ require 'spec_helper'
3
3
  class RelativeChronologicable < ActiveRecord::Base
4
4
  include Chronological::RelativeTimeframe
5
5
 
6
- relative_timeframe :start => :starting_offset,
7
- :end => :ending_offset,
8
- :base_utc => :base_datetime_utc
6
+ relative_timeframe start: :starting_offset,
7
+ end: :ending_offset,
8
+ base_utc: :base_datetime_utc
9
9
  end
10
10
 
11
11
  describe Chronological::RelativeTimeframe do
12
- let(:now) { Time.local(2012, 7, 26, 6, 0, 0) }
13
- let(:base_time) { Time.local(2012, 7, 26, 6, 0, 30) }
12
+ let(:now) { nil }
13
+ let(:starting_offset) { nil }
14
+ let(:ending_offset) { nil }
15
+ let(:base_time) { nil }
14
16
 
15
- before { Timecop.freeze(now) }
16
-
17
- let(:chronologicable) do
17
+ let!(:chronologicable) do
18
18
  RelativeChronologicable.create(
19
- :starting_offset => starting_offset,
20
- :ending_offset => ending_offset,
21
- :base_datetime_utc => base_time)
19
+ starting_offset: starting_offset,
20
+ ending_offset: ending_offset,
21
+ base_datetime_utc: base_time)
22
22
  end
23
23
 
24
- describe '#started_at_utc' do
25
- let(:ending_offset) { 'anything' }
24
+ before { Timecop.freeze(now) }
26
25
 
27
- context 'when the starting offset is set' do
26
+ it { RelativeChronologicable.new.respond_to?(:active?).should be_true }
27
+
28
+ it { RelativeChronologicable.respond_to?(:active?).should be_true }
29
+ it { RelativeChronologicable.respond_to?(:active).should be_true }
30
+
31
+ context 'when the base time is not set' do
32
+ let(:base_time) { nil }
33
+
34
+ context 'but the starting offset is set' do
28
35
  let(:starting_offset) { 30 }
29
36
 
30
- context 'but the base time is not set' do
31
- let(:base_time) { nil }
37
+ context 'and the ending offset is set' do
38
+ let(:ending_offset) { 0 }
39
+
40
+ it 'is not scheduled' do
41
+ chronologicable.should_not be_scheduled
42
+ end
32
43
 
33
- it 'is nil' do
34
- chronologicable.started_at_utc.should be_nil
44
+ it 'is partially scheduled' do
45
+ chronologicable.should be_partially_scheduled
35
46
  end
36
- end
37
47
 
38
- context 'and the base time is set' do
39
- let(:base_time) { Time.local(2012, 7, 26, 6, 0, 30) }
48
+ it 'is not included in the in progress list' do
49
+ RelativeChronologicable.in_progress.should_not include chronologicable
50
+ end
40
51
 
41
- it 'is the proper offset calculation' do
42
- chronologicable.started_at_utc.should eql Time.local(2012, 7, 26, 6, 0, 0)
52
+ it 'does not mark the list as in progress' do
53
+ RelativeChronologicable.should_not be_in_progress
43
54
  end
44
55
  end
45
- end
46
56
 
47
- context 'when the starting offset is not set' do
48
- let(:starting_offset) { nil }
57
+ context 'and the ending offset is not set' do
58
+ let(:ending_offset) { nil }
59
+
60
+ it 'is not scheduled' do
61
+ chronologicable.should_not be_scheduled
62
+ end
63
+
64
+ it 'is partially scheduled' do
65
+ chronologicable.should be_partially_scheduled
66
+ end
67
+
68
+ it 'is not included in the in progress list' do
69
+ RelativeChronologicable.in_progress.should_not include chronologicable
70
+ end
49
71
 
50
- it 'is nil' do
72
+ it 'does not mark the list as in progress' do
73
+ RelativeChronologicable.should_not be_in_progress
74
+ end
75
+ end
76
+
77
+ it 'does not have a start time' do
51
78
  chronologicable.started_at_utc.should be_nil
52
79
  end
53
80
  end
54
- end
55
81
 
56
- describe '#ended_at_utc' do
57
- let(:starting_offset) { 'anything' }
82
+ context 'and the starting offset is not set' do
83
+ let(:starting_offset) { nil }
58
84
 
59
- context 'when the ending offset is set' do
60
- let(:ending_offset) { 30 }
85
+ context 'but the ending offset is set' do
86
+ let(:ending_offset) { 0 }
61
87
 
62
- context 'but the base time is not set' do
63
- let(:base_time) { nil }
88
+ it 'is not scheduled' do
89
+ chronologicable.should_not be_scheduled
90
+ end
64
91
 
65
- it 'is nil' do
66
- chronologicable.ended_at_utc.should be_nil
92
+ it 'is partially scheduled' do
93
+ chronologicable.should be_partially_scheduled
67
94
  end
68
- end
69
95
 
70
- context 'and the base time is set' do
71
- let(:base_time) { Time.local(2012, 7, 26, 6, 0, 30) }
96
+ it 'is not included in the in progress list' do
97
+ RelativeChronologicable.in_progress.should_not include chronologicable
98
+ end
72
99
 
73
- it 'is the proper offset calculation' do
74
- chronologicable.ended_at_utc.should eql Time.local(2012, 7, 26, 6, 0, 0)
100
+ it 'does not mark the list as in progress' do
101
+ RelativeChronologicable.should_not be_in_progress
75
102
  end
76
103
  end
104
+
105
+ it 'does not have a start time' do
106
+ chronologicable.started_at_utc.should be_nil
107
+ end
108
+ end
109
+
110
+ context 'and the ending offset is set' do
111
+ let(:ending_offset) { 0 }
112
+
113
+ it 'does not have a end time' do
114
+ chronologicable.ended_at_utc.should be_nil
115
+ end
77
116
  end
78
117
 
79
- context 'when the ending offset is not set' do
118
+ context 'and the ending offset is not set' do
80
119
  let(:ending_offset) { nil }
81
120
 
82
- it 'is nil' do
121
+ it 'does not have a end time' do
83
122
  chronologicable.ended_at_utc.should be_nil
84
123
  end
85
124
  end
125
+
126
+ context 'and neither of the offsets is set' do
127
+ let(:starting_offset) { nil }
128
+ let(:ending_offset) { nil }
129
+
130
+ it 'is not scheduled' do
131
+ chronologicable.should_not be_scheduled
132
+ end
133
+
134
+ it 'is not partially scheduled' do
135
+ chronologicable.should_not be_partially_scheduled
136
+ end
137
+
138
+ it 'is not included in the in progress list' do
139
+ RelativeChronologicable.in_progress.should_not include chronologicable
140
+ end
141
+
142
+ it 'does not mark the list as in progress' do
143
+ RelativeChronologicable.should_not be_in_progress
144
+ end
145
+ end
86
146
  end
87
147
 
88
- context 'when the base time is not set' do
89
- let(:now) { Time.local(2012, 7, 26, 6, 0, 0) }
90
- let(:base_time) { nil }
148
+ context 'when the base time is set' do
149
+ let(:now) { Time.local(2012, 7, 26, 6, 0, 0) }
150
+ let(:base_time) { Time.local(2012, 7, 26, 6, 0, 30) }
91
151
 
92
- context 'but the starting offset is set' do
93
- let(:starting_offset) { 30 }
152
+ context 'when the starting offset is not set' do
153
+ let(:starting_offset) { nil }
94
154
 
95
- context 'and the ending offset is set' do
96
- let(:ending_offset) { 0 }
155
+ context 'and the ending offset is not set' do
156
+ let(:ending_offset) { nil }
97
157
 
98
158
  it 'is not scheduled' do
99
159
  chronologicable.should_not be_scheduled
@@ -102,10 +162,18 @@ describe Chronological::RelativeTimeframe do
102
162
  it 'is partially scheduled' do
103
163
  chronologicable.should be_partially_scheduled
104
164
  end
165
+
166
+ it 'is not included in the in progress list' do
167
+ RelativeChronologicable.in_progress.should_not include chronologicable
168
+ end
169
+
170
+ it 'does not mark the list as in progress' do
171
+ RelativeChronologicable.should_not be_in_progress
172
+ end
105
173
  end
106
174
 
107
- context 'and the ending offset is not set' do
108
- let(:ending_offset) { nil }
175
+ context 'and the ending offset is set' do
176
+ let(:ending_offset) { 0 }
109
177
 
110
178
  it 'is not scheduled' do
111
179
  chronologicable.should_not be_scheduled
@@ -114,14 +182,26 @@ describe Chronological::RelativeTimeframe do
114
182
  it 'is partially scheduled' do
115
183
  chronologicable.should be_partially_scheduled
116
184
  end
185
+
186
+ it 'is not included in the in progress list' do
187
+ RelativeChronologicable.in_progress.should_not include chronologicable
188
+ end
189
+
190
+ it 'does not mark the list as in progress' do
191
+ RelativeChronologicable.should_not be_in_progress
192
+ end
193
+ end
194
+
195
+ it 'does not have a start time' do
196
+ chronologicable.started_at_utc.should be_nil
117
197
  end
118
198
  end
119
199
 
120
- context 'and the starting offset is not set' do
121
- let(:starting_offset) { nil }
200
+ context 'when the starting offset is set' do
201
+ let(:starting_offset) { 30 }
122
202
 
123
- context 'but the ending offset is set' do
124
- let(:ending_offset) { 0 }
203
+ context 'and the ending offset is not set' do
204
+ let(:ending_offset) { nil }
125
205
 
126
206
  it 'is not scheduled' do
127
207
  chronologicable.should_not be_scheduled
@@ -130,77 +210,144 @@ describe Chronological::RelativeTimeframe do
130
210
  it 'is partially scheduled' do
131
211
  chronologicable.should be_partially_scheduled
132
212
  end
213
+
214
+ it 'is not included in the in progress list' do
215
+ RelativeChronologicable.in_progress.should_not include chronologicable
216
+ end
217
+
218
+ it 'does not mark the list as in progress' do
219
+ RelativeChronologicable.should_not be_in_progress
220
+ end
221
+ end
222
+
223
+ context 'and the ending offset is set' do
224
+ let(:ending_offset) { 0 }
225
+
226
+ it 'is scheduled' do
227
+ chronologicable.should be_scheduled
228
+ end
229
+
230
+ it 'is partially scheduled' do
231
+ chronologicable.should be_partially_scheduled
232
+ end
233
+
234
+ it 'is included in the in progress list' do
235
+ RelativeChronologicable.in_progress.should include chronologicable
236
+ end
237
+
238
+ it 'marks the list as in progress' do
239
+ RelativeChronologicable.should be_in_progress
240
+ end
241
+ end
242
+
243
+ it 'calculates the correct start time' do
244
+ chronologicable.started_at_utc.should eql Time.local(2012, 7, 26, 6, 0, 0)
133
245
  end
134
246
  end
135
247
 
136
- context 'and neither of the offsets is set' do
137
- let(:starting_offset) { nil }
138
- let(:ending_offset) { nil }
248
+ context 'and the ending offset is set' do
249
+ let(:ending_offset) { 30 }
139
250
 
140
- it 'is not scheduled' do
141
- chronologicable.should_not be_scheduled
251
+ it 'calculates the correct end time' do
252
+ chronologicable.ended_at_utc.should eql Time.local(2012, 7, 26, 6, 0, 0)
142
253
  end
254
+ end
143
255
 
144
- it 'is not partially scheduled' do
145
- chronologicable.should_not be_partially_scheduled
256
+ context 'and the ending offset is not set' do
257
+ let(:ending_offset) { nil }
258
+
259
+ it 'does not have a end time' do
260
+ chronologicable.ended_at_utc.should be_nil
261
+ end
262
+ end
263
+ end
264
+
265
+ context 'when it is currently a time before the starting offset' do
266
+ let(:now) { Time.local(2012, 7, 26, 5, 59, 59) }
267
+ let(:base_time) { Time.local(2012, 7, 26, 6, 0, 30) }
268
+ let(:starting_offset) { 30 }
269
+
270
+ context 'and before the ending offset' do
271
+ let(:ending_offset) { 30 }
272
+
273
+ it 'is not included in the in progress list' do
274
+ RelativeChronologicable.in_progress.should_not include chronologicable
275
+ end
276
+
277
+ it 'does not mark the list as in progress' do
278
+ RelativeChronologicable.should_not be_in_progress
146
279
  end
147
280
  end
148
281
  end
149
282
 
150
- context 'when the starting offset is not set' do
283
+ context 'when it is currently a time the same as the starting offset' do
151
284
  let(:now) { Time.local(2012, 7, 26, 6, 0, 0) }
152
- let(:starting_offset) { nil }
285
+ let(:base_time) { Time.local(2012, 7, 26, 6, 0, 30) }
286
+ let(:starting_offset) { 30 }
153
287
 
154
- context 'and the ending offset is not set' do
155
- let(:ending_offset) { nil }
288
+ context 'and before the ending offset' do
289
+ let(:ending_offset) { 29 }
156
290
 
157
- it 'is not scheduled' do
158
- chronologicable.should_not be_scheduled
291
+ it 'is included in the in progress list' do
292
+ RelativeChronologicable.in_progress.should include chronologicable
159
293
  end
160
294
 
161
- it 'is partially scheduled' do
162
- chronologicable.should be_partially_scheduled
295
+ it 'marks the list as in progress' do
296
+ RelativeChronologicable.should be_in_progress
163
297
  end
164
298
  end
165
299
 
166
- context 'and the ending offset is set' do
167
- let(:ending_offset) { 0 }
300
+ context 'and the same as the ending offset' do
301
+ let(:ending_offset) { 30 }
168
302
 
169
- it 'is not scheduled' do
170
- chronologicable.should_not be_scheduled
303
+ it 'is not included in the in progress list' do
304
+ RelativeChronologicable.in_progress.should_not include chronologicable
171
305
  end
172
306
 
173
- it 'is partially scheduled' do
174
- chronologicable.should be_partially_scheduled
307
+ it 'does not mark the list as in progress' do
308
+ RelativeChronologicable.should_not be_in_progress
175
309
  end
176
310
  end
177
311
  end
178
312
 
179
- context 'when the starting offset is set' do
180
- let(:now) { Time.local(2012, 7, 26, 6, 0, 0) }
313
+ context 'when it is currently a time after the starting offset' do
314
+ let(:now) { Time.local(2012, 7, 26, 6, 0, 2) }
315
+ let(:base_time) { Time.local(2012, 7, 26, 6, 0, 30) }
181
316
  let(:starting_offset) { 30 }
182
317
 
183
- context 'and the ending offset is not set' do
184
- let(:ending_offset) { nil }
318
+ context 'and before the ending offset' do
319
+ let(:ending_offset) { 27 }
185
320
 
186
- it 'is not scheduled' do
187
- chronologicable.should_not be_scheduled
321
+ it 'is included in the in progress list' do
322
+ RelativeChronologicable.in_progress.should include chronologicable
188
323
  end
189
324
 
190
- it 'is partially scheduled' do
191
- chronologicable.should be_partially_scheduled
325
+ it 'marks the list as in progress' do
326
+ RelativeChronologicable.should be_in_progress
192
327
  end
193
328
  end
194
329
 
195
- context 'and the ending offset is set' do
196
- let(:ending_offset) { 0 }
330
+ context 'and the same as the ending offset' do
331
+ let(:ending_offset) { 28 }
332
+
333
+ it 'is not included in the in progress list' do
334
+ RelativeChronologicable.in_progress.should_not include chronologicable
335
+ end
336
+
337
+ it 'does not mark the list as in progress' do
338
+ RelativeChronologicable.should_not be_in_progress
339
+ end
340
+ end
341
+
342
+ context 'and after the ending offset' do
343
+ let(:ending_offset) { 29 }
197
344
 
198
- it 'is scheduled' do
199
- chronologicable.should be_scheduled
345
+ it 'is not included in the in progress list' do
346
+ RelativeChronologicable.in_progress.should_not include chronologicable
200
347
  end
201
348
 
202
- it 'is partially scheduled' do
203
- chronologicable.should be_partially_scheduled
349
+ it 'does not mark the list as in progress' do
350
+ RelativeChronologicable.should_not be_in_progress
204
351
  end
205
352
  end
206
353
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chronological
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-10-25 00:00:00.000000000 Z
13
+ date: 2012-10-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec