chronological 1.0.0beta8 → 1.0.0beta9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/chronological/strategies/duration_from_start.rb +62 -0
- data/lib/chronological/strategies.rb +1 -0
- data/lib/chronological/version.rb +1 -1
- data/spec/spec_helper.rb +2 -4
- data/spec/strategies/absolute_spec.rb +1 -1
- data/spec/strategies/base_spec.rb +1 -1
- data/spec/strategies/duration_from_start_spec.rb +794 -0
- data/spec/strategies/relative_spec.rb +1 -1
- data/spec/support/active_record.rb +11 -0
- metadata +20 -70
- data/spec/support/focused.rb +0 -7
- data/spec/support/pending.rb +0 -4
- data/spec/support/timecop.rb +0 -5
@@ -0,0 +1,62 @@
|
|
1
|
+
module Chronological
|
2
|
+
class DurationFromStartStrategy < BaseStrategy
|
3
|
+
def ending_time(object, options = {})
|
4
|
+
return nil unless object.send(field_names[:starting_time]).present? &&
|
5
|
+
object.send(field_names[:duration]).present?
|
6
|
+
|
7
|
+
object.send(field_names[:starting_time]) +
|
8
|
+
object.send(field_names[:duration])
|
9
|
+
end
|
10
|
+
|
11
|
+
def scheduled?(object)
|
12
|
+
object.send(field_names[:starting_time]).present? &&
|
13
|
+
object.send(field_names[:duration]).present? &&
|
14
|
+
scheduled_time_zone(object, true).present?
|
15
|
+
end
|
16
|
+
|
17
|
+
def partially_scheduled?(object)
|
18
|
+
object.send(field_names[:starting_time]).present? ||
|
19
|
+
object.send(field_names[:duration]).present? ||
|
20
|
+
scheduled_time_zone(object, false).present?
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.in_progress(object, field_names)
|
24
|
+
object.all.select(&:in_progress?)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.in_progress?(object, field_names)
|
28
|
+
object.all.any?(&:in_progress?)
|
29
|
+
end
|
30
|
+
|
31
|
+
def has_absolute_start?
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
35
|
+
def has_absolute_end?
|
36
|
+
false
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def self.started_at_sql(field_names)
|
41
|
+
field_names[:starting_time]
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.ended_at_sql(field_names)
|
45
|
+
"#{field_names[:starting_time]} + (#{field_names[:duration]} * INTERVAL '1 seconds')"
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.duration_sql(field_names)
|
49
|
+
field_names[:duration]
|
50
|
+
end
|
51
|
+
|
52
|
+
def duration_in_seconds(object)
|
53
|
+
return nil unless object.send(field_names[:duration]).present?
|
54
|
+
|
55
|
+
object.send(field_names[:duration])
|
56
|
+
end
|
57
|
+
|
58
|
+
def has_absolute_timeframe?(object)
|
59
|
+
object.scheduled?
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'pg'
|
2
2
|
require 'active_record'
|
3
|
-
require 'timecop'
|
4
3
|
require 'chronological'
|
5
4
|
|
6
|
-
|
5
|
+
require 'rspectacular'
|
7
6
|
|
8
|
-
|
9
|
-
end
|
7
|
+
Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |f| require f }
|
@@ -17,7 +17,7 @@ class AbsoluteChronologicableWithTimeZone < ActiveRecord::Base
|
|
17
17
|
time_zone: :time_zone
|
18
18
|
end
|
19
19
|
|
20
|
-
describe Chronological::AbsoluteStrategy
|
20
|
+
describe Chronological::AbsoluteStrategy do
|
21
21
|
let(:later) { Time.local(2012, 7, 26, 6, 0, 26) }
|
22
22
|
let(:now) { Time.local(2012, 7, 26, 6, 0, 25) }
|
23
23
|
let(:past) { Time.local(2012, 7, 26, 6, 0, 24) }
|
@@ -164,7 +164,7 @@ describe Chronological::BaseStrategy do
|
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
167
|
-
describe '#in_progress?'
|
167
|
+
describe '#in_progress?' do
|
168
168
|
let(:later) { Time.local(2012, 7, 26, 6, 0, 26) }
|
169
169
|
let(:now) { Time.local(2012, 7, 26, 6, 0, 25) }
|
170
170
|
let(:past) { Time.local(2012, 7, 26, 6, 0, 24) }
|
@@ -0,0 +1,794 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class DurationFromStartChronologicable < ActiveRecord::Base
|
4
|
+
extend Chronological
|
5
|
+
|
6
|
+
timeframe type: :duration_from_start,
|
7
|
+
starting_time: :started_at,
|
8
|
+
duration: :duration_in_seconds
|
9
|
+
end
|
10
|
+
|
11
|
+
class DurationFromStartChronologicableWithTimeZone < ActiveRecord::Base
|
12
|
+
extend Chronological
|
13
|
+
|
14
|
+
timeframe type: :duration_from_start,
|
15
|
+
starting_time: :started_at,
|
16
|
+
duration: :duration_in_seconds,
|
17
|
+
time_zone: :time_zone
|
18
|
+
end
|
19
|
+
|
20
|
+
class DurationFromStartChronologicalWithOverriddenTime < ActiveRecord::Base
|
21
|
+
extend Chronological
|
22
|
+
|
23
|
+
set_table_name 'duration_from_start_chronologicables'
|
24
|
+
|
25
|
+
timeframe type: :duration_from_start,
|
26
|
+
starting_time: :started_at,
|
27
|
+
duration: :duration_in_seconds,
|
28
|
+
ending_time: :foobar_ending_time,
|
29
|
+
starting_date: :foobar_starting_date,
|
30
|
+
ending_date: :foobar_ending_date
|
31
|
+
end
|
32
|
+
|
33
|
+
describe Chronological::DurationFromStartStrategy do
|
34
|
+
let(:later) { Time.local(2012, 7, 26, 6, 0, 26) }
|
35
|
+
let(:now) { Time.local(2012, 7, 26, 6, 0, 25) }
|
36
|
+
let(:past) { Time.local(2012, 7, 26, 6, 0, 24) }
|
37
|
+
|
38
|
+
let(:started_at) { nil }
|
39
|
+
let(:duration_in_seconds) { nil }
|
40
|
+
let(:time_zone) { nil }
|
41
|
+
|
42
|
+
before(:each) { Timecop.freeze(now) }
|
43
|
+
after(:each) { Timecop.return }
|
44
|
+
|
45
|
+
let!(:chronologicable) do
|
46
|
+
DurationFromStartChronologicable.create(
|
47
|
+
started_at: started_at,
|
48
|
+
duration_in_seconds: duration_in_seconds)
|
49
|
+
end
|
50
|
+
|
51
|
+
let!(:chronologicable_without_enabled_time_zone) do
|
52
|
+
DurationFromStartChronologicable.new(
|
53
|
+
started_at: started_at,
|
54
|
+
duration_in_seconds: duration_in_seconds)
|
55
|
+
end
|
56
|
+
|
57
|
+
let!(:chronologicable_with_enabled_time_zone) do
|
58
|
+
DurationFromStartChronologicableWithTimeZone.new(
|
59
|
+
started_at: started_at,
|
60
|
+
duration_in_seconds: duration_in_seconds,
|
61
|
+
time_zone: time_zone)
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:chronologicable_with_overridden_time) do
|
65
|
+
DurationFromStartChronologicalWithOverriddenTime.new
|
66
|
+
end
|
67
|
+
|
68
|
+
it { chronologicable_with_overridden_time.should respond_to(:foobar_ending_time) }
|
69
|
+
it { chronologicable_with_overridden_time.should respond_to(:foobar_starting_date) }
|
70
|
+
it { chronologicable_with_overridden_time.should respond_to(:foobar_ending_date) }
|
71
|
+
|
72
|
+
describe '.by_date' do
|
73
|
+
before { DurationFromStartChronologicable.delete_all }
|
74
|
+
|
75
|
+
context 'when there are two chronologicables that start at the same time' do
|
76
|
+
context 'but end at different times' do
|
77
|
+
let!(:chronologicable_1) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 1) }
|
78
|
+
let!(:chronologicable_2) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 2) }
|
79
|
+
|
80
|
+
context 'when no option is passed' do
|
81
|
+
it 'properly sorts them in ascending order' do
|
82
|
+
DurationFromStartChronologicable.by_date.first.should eql chronologicable_1
|
83
|
+
DurationFromStartChronologicable.by_date.last.should eql chronologicable_2
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'when the :desc option is passed' do
|
88
|
+
it 'sorts them backwards by the start date' do
|
89
|
+
DurationFromStartChronologicable.by_date(:desc).first.should eql chronologicable_2
|
90
|
+
DurationFromStartChronologicable.by_date(:desc).last.should eql chronologicable_1
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'and end at the same time' do
|
96
|
+
let!(:chronologicable_1) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 1) }
|
97
|
+
let!(:chronologicable_2) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 1) }
|
98
|
+
|
99
|
+
describe '.by_date' do
|
100
|
+
context 'when in ascending order' do
|
101
|
+
it 'does not matter what order they are in as long as they are all there' do
|
102
|
+
DurationFromStartChronologicable.by_date.should include chronologicable_1
|
103
|
+
DurationFromStartChronologicable.by_date.should include chronologicable_2
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'when in descending order' do
|
108
|
+
it 'does not matter what order they are in as long as they are all there' do
|
109
|
+
DurationFromStartChronologicable.by_date(:desc).should include chronologicable_1
|
110
|
+
DurationFromStartChronologicable.by_date(:desc).should include chronologicable_2
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'when there are two chronologicables that start at different times' do
|
118
|
+
context 'and end at different times' do
|
119
|
+
let!(:chronologicable_1) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 2) }
|
120
|
+
let!(:chronologicable_2) { DurationFromStartChronologicable.create(:started_at => past, :duration_in_seconds => 1) }
|
121
|
+
|
122
|
+
context 'when in ascending order' do
|
123
|
+
it 'sorts them by the start date' do
|
124
|
+
DurationFromStartChronologicable.by_date.first.should eql chronologicable_2
|
125
|
+
DurationFromStartChronologicable.by_date.last.should eql chronologicable_1
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
context 'when in descending order' do
|
130
|
+
it 'sorts them backwards by the start date' do
|
131
|
+
DurationFromStartChronologicable.by_date(:desc).first.should eql chronologicable_1
|
132
|
+
DurationFromStartChronologicable.by_date(:desc).last.should eql chronologicable_2
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context 'but end at the same time' do
|
138
|
+
let!(:chronologicable_1) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 1) }
|
139
|
+
let!(:chronologicable_2) { DurationFromStartChronologicable.create(:started_at => past, :duration_in_seconds => 2) }
|
140
|
+
|
141
|
+
context 'when in ascending order' do
|
142
|
+
it 'sorts them by the start date' do
|
143
|
+
DurationFromStartChronologicable.by_date.first.should eql chronologicable_2
|
144
|
+
DurationFromStartChronologicable.by_date.last.should eql chronologicable_1
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'when in descending order' do
|
149
|
+
it 'sorts them backwards by the start date' do
|
150
|
+
DurationFromStartChronologicable.by_date(:desc).first.should eql chronologicable_1
|
151
|
+
DurationFromStartChronologicable.by_date(:desc).last.should eql chronologicable_2
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
describe '.by_duration' do
|
159
|
+
before { DurationFromStartChronologicable.delete_all }
|
160
|
+
|
161
|
+
context 'when there are two chronologicables that are different durations' do
|
162
|
+
let!(:chronologicable_1) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 1) }
|
163
|
+
let!(:chronologicable_2) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 2) }
|
164
|
+
|
165
|
+
context 'when no option is passed' do
|
166
|
+
it 'properly sorts them in ascending order' do
|
167
|
+
DurationFromStartChronologicable.by_date.first.should eql chronologicable_1
|
168
|
+
DurationFromStartChronologicable.by_date.last.should eql chronologicable_2
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context 'when the :desc option is passed' do
|
173
|
+
it 'sorts them backwards by the start date' do
|
174
|
+
DurationFromStartChronologicable.by_date(:desc).first.should eql chronologicable_2
|
175
|
+
DurationFromStartChronologicable.by_date(:desc).last.should eql chronologicable_1
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
context 'when there are two chronologicables that are the same duration' do
|
181
|
+
let!(:chronologicable_1) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 1) }
|
182
|
+
let!(:chronologicable_2) { DurationFromStartChronologicable.create(:started_at => now, :duration_in_seconds => 1) }
|
183
|
+
|
184
|
+
context 'when no option is passed' do
|
185
|
+
it 'does not matter what order they are in' do
|
186
|
+
DurationFromStartChronologicable.by_date.should include chronologicable_1
|
187
|
+
DurationFromStartChronologicable.by_date.should include chronologicable_2
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
context 'when the :desc option is passed' do
|
192
|
+
it 'does not matter what order they are in' do
|
193
|
+
DurationFromStartChronologicable.by_date(:desc).should include chronologicable_1
|
194
|
+
DurationFromStartChronologicable.by_date(:desc).should include chronologicable_2
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
context 'when the start time is not set' do
|
201
|
+
let(:started_at) { nil }
|
202
|
+
|
203
|
+
context 'but the duration is set' do
|
204
|
+
let(:duration_in_seconds) { 30 }
|
205
|
+
|
206
|
+
context 'when the time zone is not set' do
|
207
|
+
let(:time_zone) { nil }
|
208
|
+
|
209
|
+
context 'and the time zone check is enabled' do
|
210
|
+
it 'is not scheduled' do
|
211
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
212
|
+
end
|
213
|
+
|
214
|
+
it 'is partially scheduled' do
|
215
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
context 'and the time zone check is not enabled' do
|
220
|
+
it 'is not scheduled' do
|
221
|
+
chronologicable_without_enabled_time_zone.should_not be_scheduled
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'is partially scheduled' do
|
225
|
+
chronologicable_without_enabled_time_zone.should be_partially_scheduled
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
context 'when the time zone is blank' do
|
231
|
+
let(:time_zone) { '' }
|
232
|
+
|
233
|
+
context 'and the time zone check is enabled' do
|
234
|
+
it 'is not scheduled' do
|
235
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
236
|
+
end
|
237
|
+
|
238
|
+
it 'is partially scheduled' do
|
239
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
context 'and the time zone check is not enabled' do
|
244
|
+
it 'is not scheduled' do
|
245
|
+
chronologicable_without_enabled_time_zone.should_not be_scheduled
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'is partially scheduled' do
|
249
|
+
chronologicable_without_enabled_time_zone.should be_partially_scheduled
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
context 'when the time zone is set' do
|
255
|
+
let(:time_zone) { 'Alaska' }
|
256
|
+
|
257
|
+
context 'and the time zone check is enabled' do
|
258
|
+
it 'is not scheduled' do
|
259
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
260
|
+
end
|
261
|
+
|
262
|
+
it 'is partially scheduled' do
|
263
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
context 'and the time zone check is not enabled' do
|
268
|
+
it 'is not scheduled' do
|
269
|
+
chronologicable_without_enabled_time_zone.should_not be_scheduled
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'is partially scheduled' do
|
273
|
+
chronologicable_without_enabled_time_zone.should be_partially_scheduled
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
it 'is not included in the in progress list' do
|
279
|
+
DurationFromStartChronologicable.in_progress.should_not include chronologicable
|
280
|
+
end
|
281
|
+
|
282
|
+
it 'does not mark the list as in progress' do
|
283
|
+
DurationFromStartChronologicable.should_not be_in_progress
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
context 'and the duration is not set' do
|
288
|
+
let(:duration_in_seconds) { nil }
|
289
|
+
|
290
|
+
context 'when the time zone is not set' do
|
291
|
+
let(:time_zone) { nil }
|
292
|
+
|
293
|
+
context 'and the time zone check is enabled' do
|
294
|
+
it 'is not scheduled' do
|
295
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
296
|
+
end
|
297
|
+
|
298
|
+
it 'is partially scheduled' do
|
299
|
+
chronologicable_with_enabled_time_zone.should_not be_partially_scheduled
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
context 'and the time zone check is not enabled' do
|
304
|
+
it 'is not scheduled' do
|
305
|
+
chronologicable_without_enabled_time_zone.should_not be_scheduled
|
306
|
+
end
|
307
|
+
|
308
|
+
it 'is partially scheduled' do
|
309
|
+
chronologicable_without_enabled_time_zone.should_not be_partially_scheduled
|
310
|
+
end
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
context 'when the time zone is blank' do
|
315
|
+
let(:time_zone) { '' }
|
316
|
+
|
317
|
+
context 'and the time zone check is enabled' do
|
318
|
+
it 'is not scheduled' do
|
319
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
320
|
+
end
|
321
|
+
|
322
|
+
it 'is partially scheduled' do
|
323
|
+
chronologicable_with_enabled_time_zone.should_not be_partially_scheduled
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
context 'and the time zone check is not enabled' do
|
328
|
+
it 'is not scheduled' do
|
329
|
+
chronologicable_without_enabled_time_zone.should_not be_scheduled
|
330
|
+
end
|
331
|
+
|
332
|
+
it 'is partially scheduled' do
|
333
|
+
chronologicable_without_enabled_time_zone.should_not be_partially_scheduled
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
context 'when the time zone is set' do
|
339
|
+
let(:time_zone) { 'Alaska' }
|
340
|
+
|
341
|
+
context 'and the time zone check is enabled' do
|
342
|
+
it 'is not scheduled' do
|
343
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
344
|
+
end
|
345
|
+
|
346
|
+
it 'is partially scheduled' do
|
347
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
context 'and the time zone check is not enabled' do
|
352
|
+
it 'is not scheduled' do
|
353
|
+
chronologicable_without_enabled_time_zone.should_not be_scheduled
|
354
|
+
end
|
355
|
+
|
356
|
+
it 'is partially scheduled' do
|
357
|
+
chronologicable_without_enabled_time_zone.should_not be_partially_scheduled
|
358
|
+
end
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
it 'is not included in the in progress list' do
|
363
|
+
DurationFromStartChronologicable.in_progress.should_not include chronologicable
|
364
|
+
end
|
365
|
+
|
366
|
+
it 'does not mark the list as in progress' do
|
367
|
+
DurationFromStartChronologicable.should_not be_in_progress
|
368
|
+
end
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
context 'when the start time is set' do
|
373
|
+
let(:started_at) { now }
|
374
|
+
|
375
|
+
context 'and the duration is set' do
|
376
|
+
let(:duration_in_seconds) { 30 }
|
377
|
+
|
378
|
+
context 'when the time zone is not set' do
|
379
|
+
let(:time_zone) { nil }
|
380
|
+
|
381
|
+
context 'and the time zone check is enabled' do
|
382
|
+
it 'is not scheduled' do
|
383
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
384
|
+
end
|
385
|
+
|
386
|
+
it 'is partially scheduled' do
|
387
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
context 'and the time zone check is not enabled' do
|
392
|
+
it 'is scheduled' do
|
393
|
+
chronologicable_without_enabled_time_zone.should be_scheduled
|
394
|
+
end
|
395
|
+
|
396
|
+
it 'is partially scheduled' do
|
397
|
+
chronologicable_without_enabled_time_zone.should be_partially_scheduled
|
398
|
+
end
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
context 'when the time zone is blank' do
|
403
|
+
let(:time_zone) { '' }
|
404
|
+
|
405
|
+
context 'and the time zone check is enabled' do
|
406
|
+
it 'is not scheduled' do
|
407
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
408
|
+
end
|
409
|
+
|
410
|
+
it 'is partially scheduled' do
|
411
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
context 'and the time zone check is not enabled' do
|
416
|
+
it 'is scheduled' do
|
417
|
+
chronologicable_without_enabled_time_zone.should be_scheduled
|
418
|
+
end
|
419
|
+
|
420
|
+
it 'is partially scheduled' do
|
421
|
+
chronologicable_without_enabled_time_zone.should be_partially_scheduled
|
422
|
+
end
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
context 'when the time zone is set' do
|
427
|
+
let(:time_zone) { 'Alaska' }
|
428
|
+
|
429
|
+
context 'and the time zone check is enabled' do
|
430
|
+
it 'is scheduled' do
|
431
|
+
chronologicable_with_enabled_time_zone.should be_scheduled
|
432
|
+
end
|
433
|
+
|
434
|
+
it 'is partially scheduled' do
|
435
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
436
|
+
end
|
437
|
+
end
|
438
|
+
|
439
|
+
context 'and the time zone check is not enabled' do
|
440
|
+
it 'is scheduled' do
|
441
|
+
chronologicable_without_enabled_time_zone.should be_scheduled
|
442
|
+
end
|
443
|
+
|
444
|
+
it 'is partially scheduled' do
|
445
|
+
chronologicable_without_enabled_time_zone.should be_partially_scheduled
|
446
|
+
end
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
it 'is included in the in progress list' do
|
451
|
+
DurationFromStartChronologicable.in_progress.should include chronologicable
|
452
|
+
end
|
453
|
+
|
454
|
+
it 'does mark the list as in progress' do
|
455
|
+
DurationFromStartChronologicable.should be_in_progress
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
459
|
+
context 'and the duration is not set' do
|
460
|
+
let(:duration_in_seconds) { nil }
|
461
|
+
|
462
|
+
context 'when the time zone is not set' do
|
463
|
+
let(:time_zone) { nil }
|
464
|
+
|
465
|
+
context 'and the time zone check is enabled' do
|
466
|
+
it 'is not scheduled' do
|
467
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
468
|
+
end
|
469
|
+
|
470
|
+
it 'is partially scheduled' do
|
471
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
472
|
+
end
|
473
|
+
end
|
474
|
+
|
475
|
+
context 'and the time zone check is not enabled' do
|
476
|
+
it 'is not scheduled' do
|
477
|
+
chronologicable_without_enabled_time_zone.should_not be_scheduled
|
478
|
+
end
|
479
|
+
|
480
|
+
it 'is partially scheduled' do
|
481
|
+
chronologicable_without_enabled_time_zone.should be_partially_scheduled
|
482
|
+
end
|
483
|
+
end
|
484
|
+
end
|
485
|
+
|
486
|
+
context 'when the time zone is blank' do
|
487
|
+
let(:time_zone) { '' }
|
488
|
+
|
489
|
+
context 'and the time zone check is enabled' do
|
490
|
+
it 'is not scheduled' do
|
491
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
492
|
+
end
|
493
|
+
|
494
|
+
it 'is partially scheduled' do
|
495
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
496
|
+
end
|
497
|
+
end
|
498
|
+
|
499
|
+
context 'and the time zone check is not enabled' do
|
500
|
+
it 'is not scheduled' do
|
501
|
+
chronologicable_without_enabled_time_zone.should_not be_scheduled
|
502
|
+
end
|
503
|
+
|
504
|
+
it 'is partially scheduled' do
|
505
|
+
chronologicable_without_enabled_time_zone.should be_partially_scheduled
|
506
|
+
end
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
context 'when the time zone is set' do
|
511
|
+
let(:time_zone) { 'Alaska' }
|
512
|
+
|
513
|
+
context 'and the time zone check is enabled' do
|
514
|
+
it 'is not scheduled' do
|
515
|
+
chronologicable_with_enabled_time_zone.should_not be_scheduled
|
516
|
+
end
|
517
|
+
|
518
|
+
it 'is partially scheduled' do
|
519
|
+
chronologicable_with_enabled_time_zone.should be_partially_scheduled
|
520
|
+
end
|
521
|
+
end
|
522
|
+
|
523
|
+
context 'and the time zone check is not enabled' do
|
524
|
+
it 'is not scheduled' do
|
525
|
+
chronologicable_without_enabled_time_zone.should_not be_scheduled
|
526
|
+
end
|
527
|
+
|
528
|
+
it 'is partially scheduled' do
|
529
|
+
chronologicable_without_enabled_time_zone.should be_partially_scheduled
|
530
|
+
end
|
531
|
+
end
|
532
|
+
end
|
533
|
+
|
534
|
+
it 'is not included in the in progress list' do
|
535
|
+
DurationFromStartChronologicable.in_progress.should_not include chronologicable
|
536
|
+
end
|
537
|
+
|
538
|
+
it 'does not mark the list as in progress' do
|
539
|
+
DurationFromStartChronologicable.should_not be_in_progress
|
540
|
+
end
|
541
|
+
end
|
542
|
+
end
|
543
|
+
|
544
|
+
context 'when the base time is set' do
|
545
|
+
let(:started_at) { Time.local(2012, 7, 26, 6, 0, 0) }
|
546
|
+
|
547
|
+
context 'and the duration is set' do
|
548
|
+
let(:duration_in_seconds) { 30 }
|
549
|
+
|
550
|
+
it 'calculates the correct end time when called directly' do
|
551
|
+
chronologicable.ended_at.should eql Time.local(2012, 7, 26, 6, 0, 30)
|
552
|
+
end
|
553
|
+
end
|
554
|
+
|
555
|
+
context 'and the duration is not set' do
|
556
|
+
let(:duration_in_seconds) { nil }
|
557
|
+
|
558
|
+
it 'does not have a end time when called directly' do
|
559
|
+
chronologicable.ended_at.should be_nil
|
560
|
+
end
|
561
|
+
end
|
562
|
+
end
|
563
|
+
|
564
|
+
context 'when it is currently a time before the start date' do
|
565
|
+
let(:now) { Time.local(2012, 7, 26, 5, 59, 59) }
|
566
|
+
let(:started_at) { Time.local(2012, 7, 26, 6, 0, 0) }
|
567
|
+
|
568
|
+
context 'and before the calculated end date' do
|
569
|
+
let(:duration_in_seconds) { 30 }
|
570
|
+
|
571
|
+
it 'is not started when called directly' do
|
572
|
+
chronologicable.should_not be_started
|
573
|
+
end
|
574
|
+
|
575
|
+
it 'is not ended when called directly' do
|
576
|
+
chronologicable.should_not be_ended
|
577
|
+
end
|
578
|
+
|
579
|
+
it 'is not yet ended when called directly' do
|
580
|
+
chronologicable.should be_not_yet_ended
|
581
|
+
end
|
582
|
+
|
583
|
+
it 'is not included in the started list' do
|
584
|
+
DurationFromStartChronologicable.started.should_not include chronologicable
|
585
|
+
end
|
586
|
+
|
587
|
+
it 'is not included in the ended list' do
|
588
|
+
DurationFromStartChronologicable.ended.should_not include chronologicable
|
589
|
+
end
|
590
|
+
|
591
|
+
it 'is included in the not yet ended list' do
|
592
|
+
DurationFromStartChronologicable.not_yet_ended.should include chronologicable
|
593
|
+
end
|
594
|
+
|
595
|
+
it 'is not included in the in progress list' do
|
596
|
+
DurationFromStartChronologicable.in_progress.should_not include chronologicable
|
597
|
+
end
|
598
|
+
|
599
|
+
it 'does not mark the list as in progress' do
|
600
|
+
DurationFromStartChronologicable.should_not be_in_progress
|
601
|
+
end
|
602
|
+
end
|
603
|
+
end
|
604
|
+
|
605
|
+
context 'when it is currently a time the same as the start time' do
|
606
|
+
let(:now) { Time.local(2012, 7, 26, 6, 0, 0) }
|
607
|
+
let(:started_at) { Time.local(2012, 7, 26, 6, 0, 0) }
|
608
|
+
|
609
|
+
context 'and before the calculated end date' do
|
610
|
+
let(:duration_in_seconds) { 1 }
|
611
|
+
|
612
|
+
it 'is not started when called directly' do
|
613
|
+
chronologicable.should be_started
|
614
|
+
end
|
615
|
+
|
616
|
+
it 'is not ended when called directly' do
|
617
|
+
chronologicable.should_not be_ended
|
618
|
+
end
|
619
|
+
|
620
|
+
it 'is not yet ended when called directly' do
|
621
|
+
chronologicable.should be_not_yet_ended
|
622
|
+
end
|
623
|
+
|
624
|
+
it 'is included in the started list' do
|
625
|
+
DurationFromStartChronologicable.started.should include chronologicable
|
626
|
+
end
|
627
|
+
|
628
|
+
it 'is not included in the ended list' do
|
629
|
+
DurationFromStartChronologicable.ended.should_not include chronologicable
|
630
|
+
end
|
631
|
+
|
632
|
+
it 'is included in the not yet ended list' do
|
633
|
+
DurationFromStartChronologicable.not_yet_ended.should include chronologicable
|
634
|
+
end
|
635
|
+
|
636
|
+
it 'is included in the in progress list' do
|
637
|
+
DurationFromStartChronologicable.in_progress.should include chronologicable
|
638
|
+
end
|
639
|
+
|
640
|
+
it 'marks the list as in progress' do
|
641
|
+
DurationFromStartChronologicable.should be_in_progress
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
context 'and the same as the calculated end date' do
|
646
|
+
let(:duration_in_seconds) { 0 }
|
647
|
+
|
648
|
+
it 'is not started when called directly' do
|
649
|
+
chronologicable.should be_started
|
650
|
+
end
|
651
|
+
|
652
|
+
it 'is not ended when called directly' do
|
653
|
+
chronologicable.should be_ended
|
654
|
+
end
|
655
|
+
|
656
|
+
it 'is not yet ended when called directly' do
|
657
|
+
chronologicable.should_not be_not_yet_ended
|
658
|
+
end
|
659
|
+
|
660
|
+
it 'is included in the started list' do
|
661
|
+
DurationFromStartChronologicable.started.should include chronologicable
|
662
|
+
end
|
663
|
+
|
664
|
+
it 'is included in the ended list' do
|
665
|
+
DurationFromStartChronologicable.ended.should include chronologicable
|
666
|
+
end
|
667
|
+
|
668
|
+
it 'is not included in the not yet ended list' do
|
669
|
+
DurationFromStartChronologicable.not_yet_ended.should_not include chronologicable
|
670
|
+
end
|
671
|
+
|
672
|
+
it 'is not included in the in progress list' do
|
673
|
+
DurationFromStartChronologicable.in_progress.should_not include chronologicable
|
674
|
+
end
|
675
|
+
|
676
|
+
it 'does not mark the list as in progress' do
|
677
|
+
DurationFromStartChronologicable.should_not be_in_progress
|
678
|
+
end
|
679
|
+
end
|
680
|
+
end
|
681
|
+
|
682
|
+
context 'when it is currently a time after the start time' do
|
683
|
+
let(:now) { Time.local(2012, 7, 26, 6, 0, 2) }
|
684
|
+
let(:started_at) { Time.local(2012, 7, 26, 6, 0, 1) }
|
685
|
+
|
686
|
+
context 'and before the calculated end date' do
|
687
|
+
let(:duration_in_seconds) { 2 }
|
688
|
+
|
689
|
+
it 'is not started when called directly' do
|
690
|
+
chronologicable.should be_started
|
691
|
+
end
|
692
|
+
|
693
|
+
it 'is not ended when called directly' do
|
694
|
+
chronologicable.should_not be_ended
|
695
|
+
end
|
696
|
+
|
697
|
+
it 'is not yet ended when called directly' do
|
698
|
+
chronologicable.should be_not_yet_ended
|
699
|
+
end
|
700
|
+
|
701
|
+
it 'is included in the started list' do
|
702
|
+
DurationFromStartChronologicable.started.should include chronologicable
|
703
|
+
end
|
704
|
+
|
705
|
+
it 'is not included in the ended list' do
|
706
|
+
DurationFromStartChronologicable.ended.should_not include chronologicable
|
707
|
+
end
|
708
|
+
|
709
|
+
it 'is included in the not yet ended list' do
|
710
|
+
DurationFromStartChronologicable.not_yet_ended.should include chronologicable
|
711
|
+
end
|
712
|
+
|
713
|
+
it 'is included in the in progress list' do
|
714
|
+
DurationFromStartChronologicable.in_progress.should include chronologicable
|
715
|
+
end
|
716
|
+
|
717
|
+
it 'marks the list as in progress' do
|
718
|
+
DurationFromStartChronologicable.should be_in_progress
|
719
|
+
end
|
720
|
+
end
|
721
|
+
|
722
|
+
context 'and the same as the calculated end date' do
|
723
|
+
let(:duration_in_seconds) { 1 }
|
724
|
+
|
725
|
+
it 'is not started when called directly' do
|
726
|
+
chronologicable.should be_started
|
727
|
+
end
|
728
|
+
|
729
|
+
it 'is not ended when called directly' do
|
730
|
+
chronologicable.should be_ended
|
731
|
+
end
|
732
|
+
|
733
|
+
it 'is not yet ended when called directly' do
|
734
|
+
chronologicable.should_not be_not_yet_ended
|
735
|
+
end
|
736
|
+
|
737
|
+
it 'is included in the started list' do
|
738
|
+
DurationFromStartChronologicable.started.should include chronologicable
|
739
|
+
end
|
740
|
+
|
741
|
+
it 'is included in the ended list' do
|
742
|
+
DurationFromStartChronologicable.ended.should include chronologicable
|
743
|
+
end
|
744
|
+
|
745
|
+
it 'is not included in the not yet ended list' do
|
746
|
+
DurationFromStartChronologicable.not_yet_ended.should_not include chronologicable
|
747
|
+
end
|
748
|
+
|
749
|
+
it 'is not included in the in progress list' do
|
750
|
+
DurationFromStartChronologicable.in_progress.should_not include chronologicable
|
751
|
+
end
|
752
|
+
|
753
|
+
it 'does not mark the list as in progress' do
|
754
|
+
DurationFromStartChronologicable.should_not be_in_progress
|
755
|
+
end
|
756
|
+
end
|
757
|
+
|
758
|
+
context 'and after the calculated end date' do
|
759
|
+
let(:duration_in_seconds) { 0 }
|
760
|
+
|
761
|
+
it 'is not started when called directly' do
|
762
|
+
chronologicable.should be_started
|
763
|
+
end
|
764
|
+
|
765
|
+
it 'is not ended when called directly' do
|
766
|
+
chronologicable.should be_ended
|
767
|
+
end
|
768
|
+
|
769
|
+
it 'is not yet ended when called directly' do
|
770
|
+
chronologicable.should_not be_not_yet_ended
|
771
|
+
end
|
772
|
+
|
773
|
+
it 'is included in the started list' do
|
774
|
+
DurationFromStartChronologicable.started.should include chronologicable
|
775
|
+
end
|
776
|
+
|
777
|
+
it 'is included in the ended list' do
|
778
|
+
DurationFromStartChronologicable.ended.should include chronologicable
|
779
|
+
end
|
780
|
+
|
781
|
+
it 'is not included in the not yet ended list' do
|
782
|
+
DurationFromStartChronologicable.not_yet_ended.should_not include chronologicable
|
783
|
+
end
|
784
|
+
|
785
|
+
it 'is not included in the in progress list' do
|
786
|
+
DurationFromStartChronologicable.in_progress.should_not include chronologicable
|
787
|
+
end
|
788
|
+
|
789
|
+
it 'does not mark the list as in progress' do
|
790
|
+
DurationFromStartChronologicable.should_not be_in_progress
|
791
|
+
end
|
792
|
+
end
|
793
|
+
end
|
794
|
+
end
|
@@ -45,7 +45,7 @@ class RelativeChronologicableWithDynamicBase < ActiveRecord::Base
|
|
45
45
|
attr_accessor :base_datetime_utc
|
46
46
|
end
|
47
47
|
|
48
|
-
describe Chronological::RelativeStrategy
|
48
|
+
describe Chronological::RelativeStrategy do
|
49
49
|
let(:now) { nil }
|
50
50
|
let(:starting_offset) { nil }
|
51
51
|
let(:ending_offset) { nil }
|
@@ -26,6 +26,17 @@ ActiveRecord::Base.connection.create_table :base_chronologicables do |t|
|
|
26
26
|
t.datetime :ended_at
|
27
27
|
end
|
28
28
|
|
29
|
+
ActiveRecord::Base.connection.create_table :duration_from_start_chronologicables do |t|
|
30
|
+
t.datetime :started_at
|
31
|
+
t.integer :duration_in_seconds
|
32
|
+
end
|
33
|
+
|
34
|
+
ActiveRecord::Base.connection.create_table :duration_from_start_chronologicable_with_time_zones do |t|
|
35
|
+
t.datetime :started_at
|
36
|
+
t.integer :duration_in_seconds
|
37
|
+
t.string :time_zone
|
38
|
+
end
|
39
|
+
|
29
40
|
ActiveRecord::Base.connection.create_table :relative_chronologicables do |t|
|
30
41
|
t.integer :starting_offset
|
31
42
|
t.integer :ending_offset
|
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.
|
4
|
+
version: 1.0.0beta9
|
5
5
|
prerelease: 5
|
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:
|
13
|
+
date: 2013-06-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '2.
|
22
|
+
version: '2.13'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,15 +27,15 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: '2.
|
30
|
+
version: '2.13'
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
|
-
name:
|
32
|
+
name: rspectacular
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
34
34
|
none: false
|
35
35
|
requirements:
|
36
36
|
- - ~>
|
37
37
|
- !ruby/object:Gem::Version
|
38
|
-
version: '
|
38
|
+
version: '0.13'
|
39
39
|
type: :development
|
40
40
|
prerelease: false
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,63 +43,15 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ~>
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '0.13'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
|
-
requirements:
|
52
|
-
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.4.0
|
55
|
-
type: :development
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
|
-
requirements:
|
60
|
-
- - ~>
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 1.4.0
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: guard-rspec
|
65
|
-
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
|
-
requirements:
|
68
|
-
- - ~>
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: 2.0.0
|
71
|
-
type: :development
|
72
|
-
prerelease: false
|
73
|
-
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
|
-
requirements:
|
76
|
-
- - ~>
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: 2.0.0
|
79
|
-
- !ruby/object:Gem::Dependency
|
80
|
-
name: rb-fsevent
|
81
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
|
-
requirements:
|
84
|
-
- - ~>
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: 0.9.1
|
87
|
-
type: :development
|
88
|
-
prerelease: false
|
89
|
-
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
|
-
requirements:
|
92
|
-
- - ~>
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
version: 0.9.1
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: awesome_print
|
48
|
+
name: activerecord
|
97
49
|
requirement: !ruby/object:Gem::Requirement
|
98
50
|
none: false
|
99
51
|
requirements:
|
100
52
|
- - ~>
|
101
53
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
54
|
+
version: 3.1.8
|
103
55
|
type: :development
|
104
56
|
prerelease: false
|
105
57
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -107,15 +59,15 @@ dependencies:
|
|
107
59
|
requirements:
|
108
60
|
- - ~>
|
109
61
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
62
|
+
version: 3.1.8
|
111
63
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
64
|
+
name: database_cleaner
|
113
65
|
requirement: !ruby/object:Gem::Requirement
|
114
66
|
none: false
|
115
67
|
requirements:
|
116
68
|
- - ~>
|
117
69
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
70
|
+
version: '1.0'
|
119
71
|
type: :development
|
120
72
|
prerelease: false
|
121
73
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -123,7 +75,7 @@ dependencies:
|
|
123
75
|
requirements:
|
124
76
|
- - ~>
|
125
77
|
- !ruby/object:Gem::Version
|
126
|
-
version:
|
78
|
+
version: '1.0'
|
127
79
|
- !ruby/object:Gem::Dependency
|
128
80
|
name: pg
|
129
81
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,7 +99,7 @@ dependencies:
|
|
147
99
|
requirements:
|
148
100
|
- - ~>
|
149
101
|
- !ruby/object:Gem::Version
|
150
|
-
version: 0.
|
102
|
+
version: 0.6.1
|
151
103
|
type: :development
|
152
104
|
prerelease: false
|
153
105
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -155,7 +107,7 @@ dependencies:
|
|
155
107
|
requirements:
|
156
108
|
- - ~>
|
157
109
|
- !ruby/object:Gem::Version
|
158
|
-
version: 0.
|
110
|
+
version: 0.6.1
|
159
111
|
description: ''
|
160
112
|
email: support@chirrpy.com
|
161
113
|
executables: []
|
@@ -167,6 +119,7 @@ files:
|
|
167
119
|
- lib/chronological/errors.rb
|
168
120
|
- lib/chronological/strategies/absolute.rb
|
169
121
|
- lib/chronological/strategies/base.rb
|
122
|
+
- lib/chronological/strategies/duration_from_start.rb
|
170
123
|
- lib/chronological/strategies/relative.rb
|
171
124
|
- lib/chronological/strategies.rb
|
172
125
|
- lib/chronological/strategy_resolver.rb
|
@@ -179,12 +132,10 @@ files:
|
|
179
132
|
- spec/spec_helper.rb
|
180
133
|
- spec/strategies/absolute_spec.rb
|
181
134
|
- spec/strategies/base_spec.rb
|
135
|
+
- spec/strategies/duration_from_start_spec.rb
|
182
136
|
- spec/strategies/relative_spec.rb
|
183
137
|
- spec/strategy_resolver_spec.rb
|
184
138
|
- spec/support/active_record.rb
|
185
|
-
- spec/support/focused.rb
|
186
|
-
- spec/support/pending.rb
|
187
|
-
- spec/support/timecop.rb
|
188
139
|
homepage: https://github.com/chirrpy/chronological
|
189
140
|
licenses: []
|
190
141
|
post_install_message:
|
@@ -206,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
157
|
version: 1.3.1
|
207
158
|
requirements: []
|
208
159
|
rubyforge_project: chronological
|
209
|
-
rubygems_version: 1.8.
|
160
|
+
rubygems_version: 1.8.23
|
210
161
|
signing_key:
|
211
162
|
specification_version: 3
|
212
163
|
summary: Easy Accessors for ActiveModel Objects
|
@@ -215,9 +166,8 @@ test_files:
|
|
215
166
|
- spec/spec_helper.rb
|
216
167
|
- spec/strategies/absolute_spec.rb
|
217
168
|
- spec/strategies/base_spec.rb
|
169
|
+
- spec/strategies/duration_from_start_spec.rb
|
218
170
|
- spec/strategies/relative_spec.rb
|
219
171
|
- spec/strategy_resolver_spec.rb
|
220
172
|
- spec/support/active_record.rb
|
221
|
-
|
222
|
-
- spec/support/pending.rb
|
223
|
-
- spec/support/timecop.rb
|
173
|
+
has_rdoc:
|
data/spec/support/focused.rb
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
RSpec.configure do |config|
|
2
|
-
# Configure RSpec to run focused specs, and also respect the alias 'fit' for focused specs
|
3
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
4
|
-
config.filter_run :focused => true
|
5
|
-
config.alias_example_to :fit, :focused => true
|
6
|
-
config.run_all_when_everything_filtered = true
|
7
|
-
end
|
data/spec/support/pending.rb
DELETED