chronological 1.0.0beta7 → 1.0.0beta8

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -242,6 +242,9 @@ class MyTimeRangeClass
242
242
  end
243
243
  ```
244
244
 
245
+ _Note: The `:base_of_offset` option can be anything that has accessor
246
+ methods for the field._
247
+
245
248
  ### Advanced Method Usage
246
249
 
247
250
  --------------------------------------------------------------------------------
@@ -1,3 +1,3 @@
1
1
  module Chronological
2
- VERSION = '1.0.0beta7'
2
+ VERSION = '1.0.0beta8'
3
3
  end
data/lib/chronological.rb CHANGED
@@ -15,9 +15,12 @@ module Chronological
15
15
  columns_hash[strategy.field_names[:ending_date].to_s] ||= ActiveRecord::ConnectionAdapters::Column.new(strategy.field_names[:ending_date], nil, 'date')
16
16
  end
17
17
 
18
+ # TODO: Once we implement anonymous modules in Greenwich and Chronological, then
19
+ # we can call `super` here which would call Greenwich which would convert the
20
+ # time over to UTC.
18
21
  if strategy.has_absolute_start?
19
22
  define_method(strategy.field_names[:starting_time]) do |*args|
20
- super()
23
+ super().try(:utc)
21
24
  end
22
25
  else
23
26
  define_method(strategy.field_names[:starting_time]) do |*args|
@@ -27,9 +30,12 @@ module Chronological
27
30
  end
28
31
  end
29
32
 
33
+ # TODO: Once we implement anonymous modules in Greenwich and Chronological, then
34
+ # we can call `super` here which would call Greenwich which would convert the
35
+ # time over to UTC.
30
36
  if strategy.has_absolute_end?
31
37
  define_method(strategy.field_names[:ending_time]) do |*args|
32
- super()
38
+ super().try(:utc)
33
39
  end
34
40
  else
35
41
  define_method(strategy.field_names[:ending_time]) do |*args|
@@ -34,6 +34,17 @@ class RelativeChronologicalWithOverriddenTime < ActiveRecord::Base
34
34
  ending_date: :foobar_ending_date
35
35
  end
36
36
 
37
+ class RelativeChronologicableWithDynamicBase < ActiveRecord::Base
38
+ extend Chronological
39
+
40
+ timeframe type: :relative,
41
+ starting_offset: :starting_offset,
42
+ ending_offset: :ending_offset,
43
+ base_of_offset: :base_datetime_utc
44
+
45
+ attr_accessor :base_datetime_utc
46
+ end
47
+
37
48
  describe Chronological::RelativeStrategy, :timecop => true do
38
49
  let(:now) { nil }
39
50
  let(:starting_offset) { nil }
@@ -67,6 +78,14 @@ describe Chronological::RelativeStrategy, :timecop => true do
67
78
  RelativeChronologicalWithOverriddenTime.new
68
79
  end
69
80
 
81
+ let(:chronologicable_with_dynamic_base) do
82
+ RelativeChronologicableWithDynamicBase.new(
83
+ starting_offset: starting_offset,
84
+ ending_offset: ending_offset,
85
+ base_datetime_utc: base_time
86
+ )
87
+ end
88
+
70
89
  it { chronologicable_with_overridden_time.should respond_to(:foobar_starting_time) }
71
90
  it { chronologicable_with_overridden_time.should respond_to(:foobar_ending_time) }
72
91
  it { chronologicable_with_overridden_time.should respond_to(:foobar_starting_date) }
@@ -122,7 +141,7 @@ describe Chronological::RelativeStrategy, :timecop => true do
122
141
  context 'when there are two chronologicables that start at different times' do
123
142
  context 'and end at different times' do
124
143
  let!(:chronologicable_1) { RelativeChronologicable.create(:base_datetime_utc => Time.now, :starting_offset => 3, :ending_offset => 2) }
125
- let!(:chronologicable_2) { RelativeChronologicable.create(:base_datetime_utc => Time.now, :starting_offset => 2, :ending_offset => 1) }
144
+ let!(:chronologicable_2) { RelativeChronologicable.create(:base_datetime_utc => Time.now, :starting_offset => 2, :ending_offset => 1) }
126
145
 
127
146
  context 'when in ascending order' do
128
147
  it 'sorts them by the start date' do
@@ -141,7 +160,7 @@ describe Chronological::RelativeStrategy, :timecop => true do
141
160
 
142
161
  context 'but end at the same time' do
143
162
  let!(:chronologicable_1) { RelativeChronologicable.create(:base_datetime_utc => Time.now, :starting_offset => 3, :ending_offset => 1) }
144
- let!(:chronologicable_2) { RelativeChronologicable.create(:base_datetime_utc => Time.now, :starting_offset => 2, :ending_offset => 1) }
163
+ let!(:chronologicable_2) { RelativeChronologicable.create(:base_datetime_utc => Time.now, :starting_offset => 2, :ending_offset => 1) }
145
164
 
146
165
  context 'when in ascending order' do
147
166
  it 'sorts them by the start date' do
@@ -376,6 +395,10 @@ describe Chronological::RelativeStrategy, :timecop => true do
376
395
  end
377
396
  end
378
397
 
398
+ it 'does not have a start time when the base is dynamic' do
399
+ chronologicable_with_dynamic_base.started_at.should be_nil
400
+ end
401
+
379
402
  it 'does not have a start time when called directly' do
380
403
  chronologicable.started_at.should be_nil
381
404
  end
@@ -472,6 +495,10 @@ describe Chronological::RelativeStrategy, :timecop => true do
472
495
  end
473
496
  end
474
497
 
498
+ it 'does not have a start time when the base is dynamic' do
499
+ chronologicable_with_dynamic_base.started_at.should be_nil
500
+ end
501
+
475
502
  it 'does not have a start time when called directly' do
476
503
  chronologicable.started_at.should be_nil
477
504
  end
@@ -484,6 +511,10 @@ describe Chronological::RelativeStrategy, :timecop => true do
484
511
  context 'and the ending offset is set' do
485
512
  let(:ending_offset) { 0 }
486
513
 
514
+ it 'does not have an end time when the base is dynamic' do
515
+ chronologicable_with_dynamic_base.ended_at.should be_nil
516
+ end
517
+
487
518
  it 'does not have an end time when called directly' do
488
519
  chronologicable.ended_at.should be_nil
489
520
  end
@@ -496,6 +527,10 @@ describe Chronological::RelativeStrategy, :timecop => true do
496
527
  context 'and the ending offset is not set' do
497
528
  let(:ending_offset) { nil }
498
529
 
530
+ it 'does not have an end time when the base is dynamic' do
531
+ chronologicable_with_dynamic_base.ended_at.should be_nil
532
+ end
533
+
499
534
  it 'does not have an end time when called directly' do
500
535
  chronologicable.ended_at.should be_nil
501
536
  end
@@ -766,6 +801,10 @@ describe Chronological::RelativeStrategy, :timecop => true do
766
801
  end
767
802
  end
768
803
 
804
+ it 'does not have a start time when the base is dynamic' do
805
+ chronologicable_with_dynamic_base.started_at.should be_nil
806
+ end
807
+
769
808
  it 'does not have a start time when called directly' do
770
809
  chronologicable.started_at.should be_nil
771
810
  end
@@ -946,6 +985,10 @@ describe Chronological::RelativeStrategy, :timecop => true do
946
985
  end
947
986
  end
948
987
 
988
+ it 'calculates the correct start time when the base is dynamic' do
989
+ chronologicable_with_dynamic_base.started_at.should eql Time.local(2012, 7, 26, 6, 0, 0)
990
+ end
991
+
949
992
  it 'calculates the correct start time when called directly' do
950
993
  chronologicable.started_at.should eql Time.local(2012, 7, 26, 6, 0, 0)
951
994
  end
@@ -958,6 +1001,10 @@ describe Chronological::RelativeStrategy, :timecop => true do
958
1001
  context 'and the ending offset is set' do
959
1002
  let(:ending_offset) { 30 }
960
1003
 
1004
+ it 'calculates the correct end time when the base is dynamic' do
1005
+ chronologicable_with_dynamic_base.ended_at.should eql Time.local(2012, 7, 26, 6, 0, 0)
1006
+ end
1007
+
961
1008
  it 'calculates the correct end time when called directly' do
962
1009
  chronologicable.ended_at.should eql Time.local(2012, 7, 26, 6, 0, 0)
963
1010
  end
@@ -970,6 +1017,10 @@ describe Chronological::RelativeStrategy, :timecop => true do
970
1017
  context 'and the ending offset is not set' do
971
1018
  let(:ending_offset) { nil }
972
1019
 
1020
+ it 'does not have an end time when the base is dynamic' do
1021
+ chronologicable_with_dynamic_base.ended_at.should be_nil
1022
+ end
1023
+
973
1024
  it 'does not have a end time when called directly' do
974
1025
  chronologicable.ended_at.should be_nil
975
1026
  end
@@ -50,12 +50,18 @@ ActiveRecord::Base.connection.create_table :absolute_chronologicable_with_time_z
50
50
  t.string :time_zone
51
51
  end
52
52
 
53
+ ActiveRecord::Base.connection.create_table :relative_chronologicable_with_dynamic_bases do |t|
54
+ t.integer :starting_offset
55
+ t.integer :ending_offset
56
+ end
57
+
53
58
  RSpec.configure do |config|
54
59
  config.before(:each) do
55
60
  ActiveRecord::Base.connection.execute 'DELETE FROM chronologicable_strategy_classes'
56
61
  ActiveRecord::Base.connection.execute 'DELETE FROM base_chronologicables'
57
62
  ActiveRecord::Base.connection.execute 'DELETE FROM relative_chronologicables'
58
63
  ActiveRecord::Base.connection.execute 'DELETE FROM relative_chronologicable_with_time_zones'
64
+ ActiveRecord::Base.connection.execute 'DELETE FROM relative_chronologicable_with_dynamic_bases'
59
65
  ActiveRecord::Base.connection.execute 'DELETE FROM absolute_chronologicables'
60
66
  ActiveRecord::Base.connection.execute 'DELETE FROM absolute_chronologicable_with_time_zones'
61
67
  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: 1.0.0beta7
4
+ version: 1.0.0beta8
5
5
  prerelease: 5
6
6
  platform: ruby
7
7
  authors: