timespan 0.3.1 → 0.3.2
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 +15 -0
- data/VERSION +1 -1
- data/lib/timespan/compare.rb +20 -0
- data/spec/timespan/compare_spec.rb +61 -19
- data/timespan.gemspec +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -30,6 +30,21 @@ Will calculate time diff between two dates, then allow you to get the time diffe
|
|
30
30
|
|
31
31
|
See specs for more examples of usage
|
32
32
|
|
33
|
+
## Comparison
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
timespan.between?(2.days.ago, 1.minute.from_now)
|
37
|
+
timespan.between?(1.days, 3.days)
|
38
|
+
timespan < 3.days
|
39
|
+
```
|
40
|
+
|
41
|
+
## Math
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
3_days_more = timespan + 3.days
|
45
|
+
day_less = timespan -1 3.day
|
46
|
+
```
|
47
|
+
|
33
48
|
## Spanner
|
34
49
|
|
35
50
|
Internally Timespan uses Spanner to parse duration strings.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/lib/timespan/compare.rb
CHANGED
@@ -21,6 +21,20 @@ class Timespan
|
|
21
21
|
module Compare
|
22
22
|
include Comparable
|
23
23
|
|
24
|
+
def between? cfrom, cto
|
25
|
+
case cfrom
|
26
|
+
when Date, Time, DateTime
|
27
|
+
unless any_kind_of?(cto, Time, Date, DateTime)
|
28
|
+
raise ArgumentError, "Arguments must both be Date or Time, was: #{cfrom}, #{cto}"
|
29
|
+
end
|
30
|
+
(self.start_time.to_i >= cfrom.to_i) && (self.end_time.to_i <= cto.to_i)
|
31
|
+
when ::Duration, String, Integer, ActiveSupport::Duration
|
32
|
+
self >= cfrom && self <= cto
|
33
|
+
else
|
34
|
+
raise ArgumentError, "Not valid arguments for between comparison: #{cfrom}, #{cto}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
24
38
|
def time_left time = nil
|
25
39
|
time_compare = time || now
|
26
40
|
diff = end_time - time_compare
|
@@ -57,6 +71,12 @@ class Timespan
|
|
57
71
|
self
|
58
72
|
end
|
59
73
|
|
74
|
+
protected
|
75
|
+
|
76
|
+
def any_kind_of? obj, *types
|
77
|
+
types.flatten.compact.any?{|type| obj.kind_of? type }
|
78
|
+
end
|
79
|
+
|
60
80
|
|
61
81
|
def valid_compare? time
|
62
82
|
valid_compare_types.any? {|type| time.kind_of? type }
|
@@ -3,29 +3,71 @@ require 'spec_helper'
|
|
3
3
|
describe "Timespan" do
|
4
4
|
subject { timespan }
|
5
5
|
|
6
|
-
context 'From and To with
|
6
|
+
context 'From and To with 2 day apart' do
|
7
7
|
let(:timespan) { Timespan.new :from => from, :to => to}
|
8
8
|
|
9
|
-
let(:from) {
|
9
|
+
let(:from) { 2.days.ago }
|
10
10
|
let(:to) { Time.now }
|
11
11
|
|
12
|
-
describe '
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
12
|
+
describe 'Compare' do
|
13
|
+
describe '==' do
|
14
|
+
specify do
|
15
|
+
(subject == 2.days).should be_true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '<' do
|
20
|
+
specify do
|
21
|
+
(subject < 2.day).should be_false
|
22
|
+
end
|
23
|
+
|
24
|
+
specify do
|
25
|
+
(subject < 3.days).should be_true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '>' do
|
30
|
+
specify do
|
31
|
+
(subject > 2.day).should be_false
|
32
|
+
end
|
33
|
+
|
34
|
+
specify do
|
35
|
+
(subject > 1.day).should be_true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '>=' do
|
40
|
+
specify do
|
41
|
+
(subject >= 2.days).should be_true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '<=' do
|
46
|
+
specify do
|
47
|
+
(subject <= 2.days).should be_true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'between? dates' do
|
52
|
+
specify do
|
53
|
+
subject.between?(2.days.ago, 1.minute.from_now).should be_true
|
54
|
+
end
|
55
|
+
|
56
|
+
specify do
|
57
|
+
subject.between?(Time.now, 1.day.from_now).should be_false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'between? durations' do
|
62
|
+
specify do
|
63
|
+
subject.between?(1.days, 3.days).should be_true
|
64
|
+
end
|
65
|
+
|
66
|
+
specify do
|
67
|
+
subject.between?(3.days, 4.days).should be_false
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
29
71
|
end
|
30
72
|
|
31
73
|
context 'From 2 days ago until today' do
|
data/timespan.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timespan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -256,7 +256,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
256
256
|
version: '0'
|
257
257
|
segments:
|
258
258
|
- 0
|
259
|
-
hash:
|
259
|
+
hash: 1296550633399706024
|
260
260
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
261
261
|
none: false
|
262
262
|
requirements:
|