chronological 1.0.0beta3 → 1.0.0beta4
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/README.md +22 -0
- data/lib/chronological/strategies/base.rb +23 -7
- data/lib/chronological/version.rb +1 -1
- data/spec/strategies/base_spec.rb +21 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -278,6 +278,28 @@ MyTimeRangeClass.ended #=> []
|
|
278
278
|
MyTimeRangeClass.ended :as_of => 42.years.from_now #=> [range_instance]
|
279
279
|
```
|
280
280
|
|
281
|
+
#### Duration Components
|
282
|
+
|
283
|
+
When calling `duration` on a Chronological, by default it will return
|
284
|
+
the days, hours, minutes and seconds in a Hash. If you need a specific
|
285
|
+
combination of these pieces, you can pass them in an `:as` options like
|
286
|
+
so:
|
287
|
+
|
288
|
+
```ruby
|
289
|
+
# range_instance's total duration is 5 days, 1 hour, 44 minutes and 23 seconds
|
290
|
+
|
291
|
+
range_instance.duration :as => [:days, :hours, :seconds]
|
292
|
+
#=> { :days => 5, :hours => 1, :seconds => 2663 }
|
293
|
+
|
294
|
+
range_instance.duration :as => [:days, :hours, :minutes]
|
295
|
+
#=> { :days => 5, :hours => 1, :minutes => 44 }
|
296
|
+
|
297
|
+
range_instance.duration :as => [:hours, :minutes, :seconds]
|
298
|
+
#=> { :hours => 121, :minutes => 44, :seconds => 23 }
|
299
|
+
```
|
300
|
+
|
301
|
+
Affected methods:
|
302
|
+
|
281
303
|
## Is It Scheduled?
|
282
304
|
|
283
305
|
Even though Chronological does not handle anything having to do with time
|
@@ -22,16 +22,32 @@ module Chronological
|
|
22
22
|
!object.in_progress?
|
23
23
|
end
|
24
24
|
|
25
|
-
def duration(object)
|
26
|
-
|
25
|
+
def duration(object, options = { :as => [:days, :hours, :minutes, :seconds] })
|
26
|
+
duration_parts = options[:as]
|
27
|
+
remaining_duration = duration_in_seconds(object)
|
27
28
|
|
28
|
-
return Hash.new unless
|
29
|
+
return Hash.new unless remaining_duration.present?
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
if duration_parts.include? :days
|
32
|
+
days = remaining_duration / 86400
|
33
|
+
remaining_duration = remaining_duration % 86400
|
34
|
+
end
|
33
35
|
|
34
|
-
|
36
|
+
if duration_parts.include? :hours
|
37
|
+
hours = remaining_duration / 3600
|
38
|
+
remaining_duration = remaining_duration % 3600
|
39
|
+
end
|
40
|
+
|
41
|
+
if duration_parts.include? :minutes
|
42
|
+
minutes = remaining_duration / 60
|
43
|
+
remaining_duration = remaining_duration % 60
|
44
|
+
end
|
45
|
+
|
46
|
+
if duration_parts.include? :seconds
|
47
|
+
seconds = remaining_duration
|
48
|
+
end
|
49
|
+
|
50
|
+
{ :days => days, :hours => hours, :minutes => minutes, :seconds => seconds }.select {|k,v| !v.nil?}
|
35
51
|
end
|
36
52
|
|
37
53
|
def in_progress?(object)
|
@@ -71,8 +71,28 @@ describe Chronological::BaseStrategy do
|
|
71
71
|
end
|
72
72
|
|
73
73
|
describe '#duration' do
|
74
|
+
context 'when passed an options hash limiting the parts of the output' do
|
75
|
+
let(:duration_hash) { strategy.duration(chrono, :as => [:days, :hours, :seconds]) }
|
76
|
+
|
77
|
+
before { strategy.should_receive(:duration_in_seconds).and_return(438263) }
|
78
|
+
|
79
|
+
it 'removes it from the resulting hash' do
|
80
|
+
duration_hash.should_not have_key :minutes
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'makes up for it in the following more granular item' do
|
84
|
+
duration_hash[:days].should eql 5
|
85
|
+
duration_hash[:hours].should eql 1
|
86
|
+
duration_hash[:seconds].should eql 2663
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
74
90
|
context 'when the strategy represents something with a duration' do
|
75
|
-
before { strategy.should_receive(:duration_in_seconds).and_return(
|
91
|
+
before { strategy.should_receive(:duration_in_seconds).and_return(438263) }
|
92
|
+
|
93
|
+
it 'is a hash with the correct days' do
|
94
|
+
strategy.duration(chrono)[:days].should eql 5
|
95
|
+
end
|
76
96
|
|
77
97
|
it 'is a hash with the correct hours' do
|
78
98
|
strategy.duration(chrono)[:hours].should eql 1
|
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.0beta4
|
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: 2012-
|
13
|
+
date: 2012-11-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|