chronological 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/lib/chronological.rb CHANGED
@@ -1,118 +1,7 @@
1
- module Chronological
2
- module ClassMethods
3
- # TODO: Needs to be able to add a validation option which can do the
4
- # typical timeliness validation such as ended_at should be after started_at
5
- # and that both should validate timeliness
6
- def chronological(options = {})
7
- start_time_field = options[:start_utc] || options[:start]
8
- start_date_field = start_time_field.to_s.gsub(/_at/, '_on')
9
- end_time_field = options[:end_utc] || options[:end]
10
- end_date_field = end_time_field.to_s.gsub(/_at/, '_on')
11
- time_zone = options[:time_zone]
12
- start_time_field_is_utc = options.has_key? :start_utc
13
- end_time_field_is_utc = options.has_key? :end_utc
14
- start_time_field_utc_suffix = start_time_field_is_utc ? '_utc' : ''
15
- end_time_field_utc_suffix = end_time_field_is_utc ? '_utc' : ''
16
-
17
- define_method(start_date_field) do
18
- return nil unless send(start_time_field).respond_to? :to_date
19
-
20
- send(start_time_field).to_date
21
- end
22
-
23
- define_method(end_date_field) do
24
- return nil unless send(end_time_field).respond_to? :to_date
25
-
26
- send(end_time_field).to_date
27
- end
28
-
29
- define_method(:in_progress?) do
30
- return false unless send(start_time_field).present? && send(end_time_field).present?
31
-
32
- (send(start_time_field) <= Time.now.utc) && send(end_time_field).future?
33
- end
34
-
35
- define_method(:inactive?) do
36
- !active?
37
- end
38
-
39
- define_method(:scheduled?) do
40
- optional_time_zone = !options[:time_zone].nil? ? send(time_zone) : true
41
-
42
- send(start_time_field).present? && send(end_time_field).present? && optional_time_zone
43
- end
44
-
45
- define_method(:partially_scheduled?) do
46
- optional_time_zone = !options[:time_zone].nil? ? send(time_zone) : false
47
-
48
- send(start_time_field).present? || send(end_time_field).present? || optional_time_zone
49
- end
50
-
51
- define_method(:duration) do
52
- hours = (duration_in_seconds / 3600).to_i
53
- minutes = ((duration_in_seconds % 3600) / 60).to_i
54
- seconds = (duration_in_seconds % 60).to_i
1
+ require 'chronological/version'
2
+ require 'chronological/base'
3
+ require 'chronological/absolute_timeframe'
4
+ require 'chronological/relative_timeframe'
55
5
 
56
- { :hours => hours, :minutes => minutes, :seconds => seconds }
57
- end
58
-
59
- ###
60
- # Scopes
61
- #
62
- self.class.send(:define_method, :by_date) do
63
- order "#{table_name}.#{start_time_field} ASC, #{table_name}.#{end_time_field} ASC"
64
- end
65
-
66
- self.class.send(:define_method, :by_date_reversed) do
67
- order "#{table_name}.#{start_time_field} DESC, #{table_name}.#{end_time_field} DESC"
68
- end
69
-
70
- self.class.send(:define_method, :expired) do
71
- where("#{end_time_field} <= :now", :now => Time.now.utc)
72
- end
73
-
74
- self.class.send(:define_method, :current) do
75
- where("#{end_time_field} > :now", :now => Time.now.utc)
76
- end
77
-
78
- self.class.send(:define_method, :in_progress) do
79
- where("#{start_time_field} <= :now AND #{end_time_field} > :now", :now => Time.now.utc)
80
- end
81
-
82
- self.class.send(:define_method, :started) do
83
- where("#{start_time_field} <= :now", :now => Time.now.utc)
84
- end
85
-
86
- self.class.send(:define_method, :in_progress?) do
87
- in_progress.any?
88
- end
89
-
90
- instance_eval do
91
- alias active? in_progress?
92
- alias active in_progress
93
- end
94
-
95
- ###
96
- # Aliases
97
- #
98
- # Aliasing date methods to make code more readable
99
- class_eval do
100
- alias_attribute :"starts_at#{start_time_field_utc_suffix}", start_time_field.to_sym
101
- alias_attribute :"starting_at#{start_time_field_utc_suffix}", start_time_field.to_sym
102
- alias_attribute :"ends_at#{start_time_field_utc_suffix}", end_time_field.to_sym
103
- alias_attribute :"ending_at#{start_time_field_utc_suffix}", end_time_field.to_sym
104
-
105
- alias active? in_progress?
106
- end
107
-
108
- private
109
- define_method(:duration_in_seconds) do
110
- (send(end_time_field) - send(start_time_field))
111
- end
112
- end
113
- end
114
-
115
- def self.included(base)
116
- base.extend ClassMethods
117
- end
6
+ module Chronological
118
7
  end
@@ -0,0 +1,98 @@
1
+ module Chronological
2
+ module AbsoluteTimeframe
3
+ module ClassMethods
4
+ # TODO: Needs to be able to add a validation option which can do the
5
+ # typical timeliness validation such as ended_at should be after started_at
6
+ # and that both should validate timeliness
7
+ def absolute_timeframe(options = {})
8
+ start_time_field = options[:start_utc] || options[:start]
9
+ start_date_field = start_time_field.to_s.gsub(/_at/, '_on')
10
+ end_time_field = options[:end_utc] || options[:end]
11
+ end_date_field = end_time_field.to_s.gsub(/_at/, '_on')
12
+ time_zone = options[:time_zone]
13
+ start_time_field_is_utc = options.has_key? :start_utc
14
+ end_time_field_is_utc = options.has_key? :end_utc
15
+ start_time_field_utc_suffix = start_time_field_is_utc ? '_utc' : ''
16
+ end_time_field_utc_suffix = end_time_field_is_utc ? '_utc' : ''
17
+
18
+ define_method(:scheduled?) do
19
+ optional_time_zone = !options[:time_zone].nil? ? send(time_zone) : true
20
+
21
+ send(start_time_field).present? && send(end_time_field).present? && optional_time_zone
22
+ end
23
+
24
+ define_method(:partially_scheduled?) do
25
+ optional_time_zone = !options[:time_zone].nil? ? send(time_zone) : false
26
+
27
+ send(start_time_field).present? || send(end_time_field).present? || optional_time_zone
28
+ end
29
+
30
+ ###
31
+ # Scopes
32
+ #
33
+ self.class.send(:define_method, :by_date) do
34
+ order "#{table_name}.#{start_time_field} ASC, #{table_name}.#{end_time_field} ASC"
35
+ end
36
+
37
+ self.class.send(:define_method, :by_date_reversed) do
38
+ order "#{table_name}.#{start_time_field} DESC, #{table_name}.#{end_time_field} DESC"
39
+ end
40
+
41
+ self.class.send(:define_method, :expired) do
42
+ where("#{end_time_field} <= :now", :now => Time.now.utc)
43
+ end
44
+
45
+ self.class.send(:define_method, :current) do
46
+ where("#{end_time_field} > :now", :now => Time.now.utc)
47
+ end
48
+
49
+ self.class.send(:define_method, :in_progress) do
50
+ where("#{start_time_field} <= :now AND #{end_time_field} > :now", :now => Time.now.utc)
51
+ end
52
+
53
+ self.class.send(:define_method, :started) do
54
+ where("#{start_time_field} <= :now", :now => Time.now.utc)
55
+ end
56
+
57
+ self.class.send(:define_method, :in_progress?) do
58
+ in_progress.any?
59
+ end
60
+
61
+ instance_eval do
62
+ alias active? in_progress?
63
+ alias active in_progress
64
+ end
65
+
66
+ ###
67
+ # Aliases
68
+ #
69
+ # Aliasing date methods to make code more readable
70
+ class_eval do
71
+ alias_attribute :"starts_at#{start_time_field_utc_suffix}", start_time_field.to_sym
72
+ alias_attribute :"starting_at#{start_time_field_utc_suffix}", start_time_field.to_sym
73
+ alias_attribute :"ends_at#{start_time_field_utc_suffix}", end_time_field.to_sym
74
+ alias_attribute :"ending_at#{start_time_field_utc_suffix}", end_time_field.to_sym
75
+ end
76
+
77
+ base_timeframe start_date_field: start_date_field,
78
+ start_time_field: start_time_field,
79
+ end_date_field: end_date_field,
80
+ end_time_field: end_time_field
81
+
82
+ private
83
+ define_method(:has_absolute_timeframe?) do
84
+ send(start_time_field).present? && send(end_time_field).present?
85
+ end
86
+
87
+ define_method(:duration_in_seconds) do
88
+ (send(end_time_field) - send(start_time_field))
89
+ end
90
+ end
91
+ end
92
+
93
+ def self.included(base)
94
+ base.extend Chronological::Base
95
+ base.extend ClassMethods
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,41 @@
1
+ module Chronological
2
+ module Base
3
+ def base_timeframe(options = {})
4
+ define_method(options[:start_date_field]) do
5
+ return nil unless send(options[:start_time_field]).respond_to? :to_date
6
+
7
+ send(options[:start_time_field]).to_date
8
+ end
9
+
10
+ define_method(options[:end_date_field]) do
11
+ return nil unless send(options[:end_time_field]).respond_to? :to_date
12
+
13
+ send(options[:end_time_field]).to_date
14
+ end
15
+
16
+ define_method(:inactive?) do
17
+ !active?
18
+ end
19
+
20
+ define_method(:duration) do
21
+ return Hash.new unless duration_in_seconds.present?
22
+
23
+ hours = (duration_in_seconds / 3600).to_i
24
+ minutes = ((duration_in_seconds % 3600) / 60).to_i
25
+ seconds = (duration_in_seconds % 60).to_i
26
+
27
+ { :hours => hours, :minutes => minutes, :seconds => seconds }
28
+ end
29
+
30
+ define_method(:in_progress?) do
31
+ return false unless has_absolute_timeframe?
32
+
33
+ (send(options[:start_time_field]) <= Time.now.utc) && send(options[:end_time_field]).future?
34
+ end
35
+
36
+ class_eval do
37
+ alias active? in_progress?
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,57 @@
1
+ module Chronological
2
+ module RelativeTimeframe
3
+ module ClassMethods
4
+ def relative_timeframe(options = {})
5
+ base_time_field = options[:base_utc] || options[:base]
6
+ base_time_field_is_utc = options.has_key? :base_utc
7
+ time_field_utc_suffix = base_time_field_is_utc ? 'utc' : nil
8
+
9
+ start_time_field = ['started_at', time_field_utc_suffix].join('_')
10
+ end_time_field = ['ended_at', time_field_utc_suffix].join('_')
11
+ start_date_field = ['started_on', time_field_utc_suffix].join('_')
12
+ end_date_field = ['ended_on', time_field_utc_suffix].join('_')
13
+
14
+ define_method(start_time_field) do
15
+ return nil unless send(base_time_field).present? && send(options[:start]).present?
16
+
17
+ send(base_time_field) - send(options[:start])
18
+ end
19
+
20
+ define_method(end_time_field) do
21
+ return nil unless send(base_time_field).present? && send(options[:end]).present?
22
+
23
+ send(base_time_field) - send(options[:end])
24
+ end
25
+
26
+ define_method(:scheduled?) do
27
+ send(base_time_field).present? && send(options[:start]).present? && send(options[:end]).present?
28
+ end
29
+
30
+ define_method(:partially_scheduled?) do
31
+ send(base_time_field).present? || send(options[:start]).present? || send(options[:end]).present?
32
+ end
33
+
34
+ base_timeframe start_date_field: start_date_field,
35
+ start_time_field: start_time_field,
36
+ end_date_field: end_date_field,
37
+ end_time_field: end_time_field
38
+
39
+ private
40
+ define_method(:has_absolute_timeframe?) do
41
+ scheduled?
42
+ end
43
+
44
+ define_method(:duration_in_seconds) do
45
+ return nil unless send(options[:start]).present? && send(options[:end]).present?
46
+
47
+ send(options[:start]) - send(options[:end])
48
+ end
49
+ end
50
+ end
51
+
52
+ def self.included(base)
53
+ base.extend Chronological::Base
54
+ base.extend ClassMethods
55
+ end
56
+ end
57
+ end
@@ -1,3 +1,3 @@
1
1
  module Chronological
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
@@ -1,21 +1,21 @@
1
1
  require 'spec_helper'
2
2
 
3
- class Chronologicable < ActiveRecord::Base
4
- include Chronological
3
+ class AbsoluteChronologicable < ActiveRecord::Base
4
+ include Chronological::AbsoluteTimeframe
5
5
 
6
- chronological :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
- include Chronological
11
+ include Chronological::AbsoluteTimeframe
12
12
 
13
- chronological :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
- describe Chronological, :timecop => true do
18
+ describe Chronological::AbsoluteTimeframe, :timecop => true do
19
19
  let(:later) { Time.local(2012, 7, 26, 6, 0, 26) }
20
20
  let(:now) { Time.local(2012, 7, 26, 6, 0, 25) }
21
21
  let(:past) { Time.local(2012, 7, 26, 6, 0, 24) }
@@ -23,13 +23,13 @@ describe Chronological, :timecop => true do
23
23
  before { Timecop.freeze(now) }
24
24
 
25
25
  let(:chronologicable) do
26
- Chronologicable.create(
26
+ AbsoluteChronologicable.create(
27
27
  :started_at_utc => start_time,
28
28
  :ended_at_utc => end_time)
29
29
  end
30
30
 
31
31
  let(:chronologicable_without_enabled_time_zone) do
32
- Chronologicable.new(
32
+ AbsoluteChronologicable.new(
33
33
  :started_at_utc => start_time,
34
34
  :ended_at_utc => end_time)
35
35
  end
@@ -41,50 +41,50 @@ describe Chronological, :timecop => true do
41
41
  :time_zone => time_zone)
42
42
  end
43
43
 
44
- it { Chronologicable.new.respond_to?(:starts_at_utc).should be_true }
45
- it { Chronologicable.new.respond_to?(:starting_at_utc).should be_true }
46
- it { Chronologicable.new.respond_to?(:ends_at_utc).should be_true }
47
- it { Chronologicable.new.respond_to?(:ending_at_utc).should be_true }
48
- it { Chronologicable.new.respond_to?(:active?).should be_true }
44
+ it { AbsoluteChronologicable.new.respond_to?(:starts_at_utc).should be_true }
45
+ it { AbsoluteChronologicable.new.respond_to?(:starting_at_utc).should be_true }
46
+ it { AbsoluteChronologicable.new.respond_to?(:ends_at_utc).should be_true }
47
+ it { AbsoluteChronologicable.new.respond_to?(:ending_at_utc).should be_true }
48
+ it { AbsoluteChronologicable.new.respond_to?(:active?).should be_true }
49
49
 
50
- it { Chronologicable.respond_to?(:active?).should be_true }
51
- it { Chronologicable.respond_to?(:active).should be_true }
50
+ it { AbsoluteChronologicable.respond_to?(:active?).should be_true }
51
+ it { AbsoluteChronologicable.respond_to?(:active).should be_true }
52
52
 
53
53
  context 'when there are two chronologicables that start at the same time' do
54
54
  context 'but end at different times' do
55
- let!(:chronologicable_1) { Chronologicable.create :started_at_utc => past, :ended_at_utc => past }
56
- let!(:chronologicable_2) { Chronologicable.create :started_at_utc => past, :ended_at_utc => now }
55
+ let!(:chronologicable_1) { AbsoluteChronologicable.create :started_at_utc => past, :ended_at_utc => past }
56
+ let!(:chronologicable_2) { AbsoluteChronologicable.create :started_at_utc => past, :ended_at_utc => now }
57
57
 
58
58
  describe '.by_date' do
59
59
  it 'properly sorts them' do
60
- Chronologicable.by_date.first.should eql chronologicable_1
61
- Chronologicable.by_date.last.should eql chronologicable_2
60
+ AbsoluteChronologicable.by_date.first.should eql chronologicable_1
61
+ AbsoluteChronologicable.by_date.last.should eql chronologicable_2
62
62
  end
63
63
  end
64
64
 
65
65
  describe '.by_date_reversed' do
66
66
  it 'sorts them backwards by the start date' do
67
- Chronologicable.by_date_reversed.first.should eql chronologicable_2
68
- Chronologicable.by_date_reversed.last.should eql chronologicable_1
67
+ AbsoluteChronologicable.by_date_reversed.first.should eql chronologicable_2
68
+ AbsoluteChronologicable.by_date_reversed.last.should eql chronologicable_1
69
69
  end
70
70
  end
71
71
  end
72
72
 
73
73
  context 'and end at the same time' do
74
- let!(:chronologicable_1) { Chronologicable.create :started_at_utc => past, :ended_at_utc => now }
75
- let!(:chronologicable_2) { Chronologicable.create :started_at_utc => past, :ended_at_utc => now }
74
+ let!(:chronologicable_1) { AbsoluteChronologicable.create :started_at_utc => past, :ended_at_utc => now }
75
+ let!(:chronologicable_2) { AbsoluteChronologicable.create :started_at_utc => past, :ended_at_utc => now }
76
76
 
77
77
  describe '.by_date' do
78
78
  it 'does not matter what order they are in as long as they are all there' do
79
- Chronologicable.by_date.should include chronologicable_1
80
- Chronologicable.by_date.should include chronologicable_2
79
+ AbsoluteChronologicable.by_date.should include chronologicable_1
80
+ AbsoluteChronologicable.by_date.should include chronologicable_2
81
81
  end
82
82
  end
83
83
 
84
84
  describe '.by_date_reversed' do
85
85
  it 'does not matter what order they are in as long as they are all there' do
86
- Chronologicable.by_date.should include chronologicable_1
87
- Chronologicable.by_date.should include chronologicable_2
86
+ AbsoluteChronologicable.by_date.should include chronologicable_1
87
+ AbsoluteChronologicable.by_date.should include chronologicable_2
88
88
  end
89
89
  end
90
90
  end
@@ -92,84 +92,44 @@ describe Chronological, :timecop => true do
92
92
 
93
93
  context 'when there are two chronologicables that start at different times' do
94
94
  context 'and end at different times' do
95
- let!(:chronologicable_1) { Chronologicable.create :started_at_utc => past, :ended_at_utc => now }
96
- let!(:chronologicable_2) { Chronologicable.create :started_at_utc => now, :ended_at_utc => later }
95
+ let!(:chronologicable_1) { AbsoluteChronologicable.create :started_at_utc => past, :ended_at_utc => now }
96
+ let!(:chronologicable_2) { AbsoluteChronologicable.create :started_at_utc => now, :ended_at_utc => later }
97
97
 
98
98
  describe '.by_date' do
99
99
  it 'sorts them by the start date' do
100
- Chronologicable.by_date.first.should eql chronologicable_1
101
- Chronologicable.by_date.last.should eql chronologicable_2
100
+ AbsoluteChronologicable.by_date.first.should eql chronologicable_1
101
+ AbsoluteChronologicable.by_date.last.should eql chronologicable_2
102
102
  end
103
103
  end
104
104
 
105
105
  describe '.by_date_reversed' do
106
106
  it 'sorts them backwards by the start date' do
107
- Chronologicable.by_date_reversed.first.should eql chronologicable_2
108
- Chronologicable.by_date_reversed.last.should eql chronologicable_1
107
+ AbsoluteChronologicable.by_date_reversed.first.should eql chronologicable_2
108
+ AbsoluteChronologicable.by_date_reversed.last.should eql chronologicable_1
109
109
  end
110
110
  end
111
111
  end
112
112
 
113
113
  context 'but end at the same time' do
114
- let!(:chronologicable_1) { Chronologicable.create :started_at_utc => past, :ended_at_utc => later }
115
- let!(:chronologicable_2) { Chronologicable.create :started_at_utc => now, :ended_at_utc => later }
114
+ let!(:chronologicable_1) { AbsoluteChronologicable.create :started_at_utc => past, :ended_at_utc => later }
115
+ let!(:chronologicable_2) { AbsoluteChronologicable.create :started_at_utc => now, :ended_at_utc => later }
116
116
 
117
117
  describe '.by_date' do
118
118
  it 'sorts them by the start date' do
119
- Chronologicable.by_date.first.should eql chronologicable_1
120
- Chronologicable.by_date.last.should eql chronologicable_2
119
+ AbsoluteChronologicable.by_date.first.should eql chronologicable_1
120
+ AbsoluteChronologicable.by_date.last.should eql chronologicable_2
121
121
  end
122
122
  end
123
123
 
124
124
  describe '.by_date_reversed' do
125
125
  it 'sorts them backwards by the start date' do
126
- Chronologicable.by_date_reversed.first.should eql chronologicable_2
127
- Chronologicable.by_date_reversed.last.should eql chronologicable_1
126
+ AbsoluteChronologicable.by_date_reversed.first.should eql chronologicable_2
127
+ AbsoluteChronologicable.by_date_reversed.last.should eql chronologicable_1
128
128
  end
129
129
  end
130
130
  end
131
131
  end
132
132
 
133
- describe '#started_on_utc' do
134
- context 'when the date field is set to a string' do
135
- let(:start_time) { '2012-07-26 03:15:12' }
136
- let(:end_time) { nil }
137
-
138
- it 'properly converts the date' do
139
- chronologicable.started_on_utc.should eql Time.utc(2012, 7, 26, 3, 15, 12).to_date
140
- end
141
- end
142
-
143
- context 'when the date field is set to a date' do
144
- let(:start_time) { Time.utc(2012, 7, 26, 3, 15, 12) }
145
- let(:end_time) { nil }
146
-
147
- it 'properly converts the date' do
148
- chronologicable.started_on_utc.should eql Time.utc(2012, 7, 26, 3, 15, 12).to_date
149
- end
150
- end
151
- end
152
-
153
- describe '#ended_on_utc' do
154
- context 'when the date field is set to a string' do
155
- let(:start_time) { nil }
156
- let(:end_time) { '2012-07-26 03:15:12' }
157
-
158
- it 'properly converts the date' do
159
- chronologicable.ended_on_utc.should eql Time.utc(2012, 7, 26, 3, 15, 12).to_date
160
- end
161
- end
162
-
163
- context 'when the date field is set to a date' do
164
- let(:start_time) { nil }
165
- let(:end_time) { Time.utc(2012, 7, 26, 3, 15, 12) }
166
-
167
- it 'properly converts the date' do
168
- chronologicable.ended_on_utc.should eql Time.utc(2012, 7, 26, 3, 15, 12).to_date
169
- end
170
- end
171
- end
172
-
173
133
  context 'when a start time is set' do
174
134
  let(:start_time) { Time.now }
175
135
 
@@ -333,40 +293,34 @@ describe Chronological, :timecop => true do
333
293
  context 'and has already ended' do
334
294
  let(:end_time) { past }
335
295
 
336
- describe '#in_progress?' do
337
- it 'is false' do
338
- chronologicable.should_not be_in_progress
339
- end
340
- end
341
-
342
296
  describe '.in_progress?' do
343
297
  it 'is false' do
344
298
  chronologicable
345
- Chronologicable.should_not be_in_progress
299
+ AbsoluteChronologicable.should_not be_in_progress
346
300
  end
347
301
  end
348
302
 
349
303
  describe '.expired' do
350
304
  it 'includes that chronologicable' do
351
- Chronologicable.expired.should include chronologicable
305
+ AbsoluteChronologicable.expired.should include chronologicable
352
306
  end
353
307
  end
354
308
 
355
309
  describe '.started' do
356
310
  it 'includes that chronologicable' do
357
- Chronologicable.started.should include chronologicable
311
+ AbsoluteChronologicable.started.should include chronologicable
358
312
  end
359
313
  end
360
314
 
361
315
  describe '.current' do
362
316
  it 'does not include that chronologicable' do
363
- Chronologicable.current.should_not include chronologicable
317
+ AbsoluteChronologicable.current.should_not include chronologicable
364
318
  end
365
319
  end
366
320
 
367
321
  describe '.in_progress' do
368
322
  it 'does not include that chronologicable' do
369
- Chronologicable.in_progress.should_not include chronologicable
323
+ AbsoluteChronologicable.in_progress.should_not include chronologicable
370
324
  end
371
325
  end
372
326
  end
@@ -374,40 +328,34 @@ describe Chronological, :timecop => true do
374
328
  context 'and ends now' do
375
329
  let(:end_time) { now }
376
330
 
377
- describe '#in_progress?' do
378
- it 'is false' do
379
- chronologicable.should_not be_in_progress
380
- end
381
- end
382
-
383
331
  describe '.in_progress?' do
384
332
  it 'is false' do
385
333
  chronologicable
386
- Chronologicable.should_not be_in_progress
334
+ AbsoluteChronologicable.should_not be_in_progress
387
335
  end
388
336
  end
389
337
 
390
338
  describe '.expired' do
391
339
  it 'does include that chronologicable' do
392
- Chronologicable.expired.should include chronologicable
340
+ AbsoluteChronologicable.expired.should include chronologicable
393
341
  end
394
342
  end
395
343
 
396
344
  describe '.started' do
397
345
  it 'includes that chronologicable' do
398
- Chronologicable.started.should include chronologicable
346
+ AbsoluteChronologicable.started.should include chronologicable
399
347
  end
400
348
  end
401
349
 
402
350
  describe '.current' do
403
351
  it 'does not include that chronologicable' do
404
- Chronologicable.current.should_not include chronologicable
352
+ AbsoluteChronologicable.current.should_not include chronologicable
405
353
  end
406
354
  end
407
355
 
408
356
  describe '.in_progress' do
409
357
  it 'does not include that chronologicable' do
410
- Chronologicable.in_progress.should_not include chronologicable
358
+ AbsoluteChronologicable.in_progress.should_not include chronologicable
411
359
  end
412
360
  end
413
361
  end
@@ -415,40 +363,34 @@ describe Chronological, :timecop => true do
415
363
  context 'and ends later' do
416
364
  let(:end_time) { later }
417
365
 
418
- describe '#in_progress?' do
419
- it 'is true' do
420
- chronologicable.should be_in_progress
421
- end
422
- end
423
-
424
366
  describe '.in_progress?' do
425
367
  it 'is true' do
426
368
  chronologicable
427
- Chronologicable.should be_in_progress
369
+ AbsoluteChronologicable.should be_in_progress
428
370
  end
429
371
  end
430
372
 
431
373
  describe '.expired' do
432
374
  it 'does not include that chronologicable' do
433
- Chronologicable.expired.should_not include chronologicable
375
+ AbsoluteChronologicable.expired.should_not include chronologicable
434
376
  end
435
377
  end
436
378
 
437
379
  describe '.started' do
438
380
  it 'includes that chronologicable' do
439
- Chronologicable.started.should include chronologicable
381
+ AbsoluteChronologicable.started.should include chronologicable
440
382
  end
441
383
  end
442
384
 
443
385
  describe '.current' do
444
386
  it 'includes that chronologicable' do
445
- Chronologicable.current.should include chronologicable
387
+ AbsoluteChronologicable.current.should include chronologicable
446
388
  end
447
389
  end
448
390
 
449
391
  describe '.in_progress' do
450
392
  it 'includes that chronologicable' do
451
- Chronologicable.in_progress.should include chronologicable
393
+ AbsoluteChronologicable.in_progress.should include chronologicable
452
394
  end
453
395
  end
454
396
  end
@@ -460,40 +402,34 @@ describe Chronological, :timecop => true do
460
402
  context 'and ends now' do
461
403
  let(:end_time) { now }
462
404
 
463
- describe '#in_progress?' do
464
- it 'is false' do
465
- chronologicable.should_not be_in_progress
466
- end
467
- end
468
-
469
405
  describe '.in_progress?' do
470
406
  it 'is false' do
471
407
  chronologicable
472
- Chronologicable.should_not be_in_progress
408
+ AbsoluteChronologicable.should_not be_in_progress
473
409
  end
474
410
  end
475
411
 
476
412
  describe '.expired' do
477
413
  it 'does include that chronologicable' do
478
- Chronologicable.expired.should include chronologicable
414
+ AbsoluteChronologicable.expired.should include chronologicable
479
415
  end
480
416
  end
481
417
 
482
418
  describe '.started' do
483
419
  it 'includes that chronologicable' do
484
- Chronologicable.started.should include chronologicable
420
+ AbsoluteChronologicable.started.should include chronologicable
485
421
  end
486
422
  end
487
423
 
488
424
  describe '.current' do
489
425
  it 'does not include that chronologicable' do
490
- Chronologicable.current.should_not include chronologicable
426
+ AbsoluteChronologicable.current.should_not include chronologicable
491
427
  end
492
428
  end
493
429
 
494
430
  describe '.in_progress' do
495
431
  it 'does not include that chronologicable' do
496
- Chronologicable.in_progress.should_not include chronologicable
432
+ AbsoluteChronologicable.in_progress.should_not include chronologicable
497
433
  end
498
434
  end
499
435
  end
@@ -501,40 +437,34 @@ describe Chronological, :timecop => true do
501
437
  context 'and ends later' do
502
438
  let(:end_time) { later }
503
439
 
504
- describe '#in_progress?' do
505
- it 'is true' do
506
- chronologicable.should be_in_progress
507
- end
508
- end
509
-
510
440
  describe '.in_progress?' do
511
441
  it 'is true' do
512
442
  chronologicable
513
- Chronologicable.should be_in_progress
443
+ AbsoluteChronologicable.should be_in_progress
514
444
  end
515
445
  end
516
446
 
517
447
  describe '.expired' do
518
448
  it 'does not include that chronologicable' do
519
- Chronologicable.expired.should_not include chronologicable
449
+ AbsoluteChronologicable.expired.should_not include chronologicable
520
450
  end
521
451
  end
522
452
 
523
453
  describe '.started' do
524
454
  it 'includes that chronologicable' do
525
- Chronologicable.started.should include chronologicable
455
+ AbsoluteChronologicable.started.should include chronologicable
526
456
  end
527
457
  end
528
458
 
529
459
  describe '.current' do
530
460
  it 'includes that chronologicable' do
531
- Chronologicable.current.should include chronologicable
461
+ AbsoluteChronologicable.current.should include chronologicable
532
462
  end
533
463
  end
534
464
 
535
465
  describe '.in_progress' do
536
466
  it 'includes that chronologicable' do
537
- Chronologicable.in_progress.should include chronologicable
467
+ AbsoluteChronologicable.in_progress.should include chronologicable
538
468
  end
539
469
  end
540
470
  end
@@ -544,110 +474,34 @@ describe Chronological, :timecop => true do
544
474
  let(:start_time) { later }
545
475
  let(:end_time) { later }
546
476
 
547
- describe '#in_progress?' do
548
- it 'is false' do
549
- chronologicable.should_not be_in_progress
550
- end
551
- end
552
-
553
477
  describe '.in_progress?' do
554
478
  it 'is false' do
555
479
  chronologicable
556
- Chronologicable.should_not be_in_progress
480
+ AbsoluteChronologicable.should_not be_in_progress
557
481
  end
558
482
  end
559
483
 
560
484
  describe '.expired' do
561
485
  it 'does not include that chronologicable' do
562
- Chronologicable.expired.should_not include chronologicable
486
+ AbsoluteChronologicable.expired.should_not include chronologicable
563
487
  end
564
488
  end
565
489
 
566
490
  describe '.started' do
567
491
  it 'does not include that chronologicable' do
568
- Chronologicable.started.should_not include chronologicable
492
+ AbsoluteChronologicable.started.should_not include chronologicable
569
493
  end
570
494
  end
571
495
 
572
496
  describe '.current' do
573
497
  it 'includes that chronologicable' do
574
- Chronologicable.current.should include chronologicable
498
+ AbsoluteChronologicable.current.should include chronologicable
575
499
  end
576
500
  end
577
501
 
578
502
  describe '.in_progress' do
579
503
  it 'does not include that chronologicable' do
580
- Chronologicable.in_progress.should_not include chronologicable
581
- end
582
- end
583
- end
584
-
585
- describe '#duration' do
586
- context 'when the chronologicable represents something with a complex time duration' do
587
- let(:start_time) { Time.local(2012, 7, 26, 14, 13, 16) }
588
- let(:end_time) { Time.local(2012, 7, 26, 15, 57, 39) }
589
-
590
- it 'is a hash with the correct hours' do
591
- chronologicable.duration[:hours].should eql 1
592
- end
593
-
594
- it 'is a hash with the correct minutes' do
595
- chronologicable.duration[:minutes].should eql 44
596
- end
597
-
598
- it 'is a hash with the correct seconds' do
599
- chronologicable.duration[:seconds].should eql 23
600
- end
601
- end
602
-
603
- context 'when the chronologicable represents something with an even second time duration' do
604
- let(:start_time) { Time.local(2012, 7, 26, 14, 13, 16) }
605
- let(:end_time) { Time.local(2012, 7, 26, 15, 57, 16) }
606
-
607
- it 'is a hash with the correct hours' do
608
- chronologicable.duration[:hours].should eql 1
609
- end
610
-
611
- it 'is a hash with the correct minutes' do
612
- chronologicable.duration[:minutes].should eql 44
613
- end
614
-
615
- it 'is a hash with the correct seconds' do
616
- chronologicable.duration[:seconds].should eql 0
617
- end
618
- end
619
-
620
- context 'when the chronologicable represents something with an even minute time duration' do
621
- let(:start_time) { Time.local(2012, 7, 26, 14, 13, 16) }
622
- let(:end_time) { Time.local(2012, 7, 26, 15, 13, 16) }
623
-
624
- it 'is a hash with the correct hours' do
625
- chronologicable.duration[:hours].should eql 1
626
- end
627
-
628
- it 'is a hash with the correct minutes' do
629
- chronologicable.duration[:minutes].should eql 0
630
- end
631
-
632
- it 'is a hash with the correct seconds' do
633
- chronologicable.duration[:seconds].should eql 0
634
- end
635
- end
636
-
637
- context 'when the chronologicable represents something with a zero duration' do
638
- let(:start_time) { Time.local(2012, 7, 26, 14, 13, 16) }
639
- let(:end_time) { Time.local(2012, 7, 26, 14, 13, 16) }
640
-
641
- it 'is a hash with the correct hours' do
642
- chronologicable.duration[:hours].should eql 0
643
- end
644
-
645
- it 'is a hash with the correct minutes' do
646
- chronologicable.duration[:minutes].should eql 0
647
- end
648
-
649
- it 'is a hash with the correct seconds' do
650
- chronologicable.duration[:seconds].should eql 0
504
+ AbsoluteChronologicable.in_progress.should_not include chronologicable
651
505
  end
652
506
  end
653
507
  end