timerage 2.3.0 → 2.4.0
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.
- checksums.yaml +4 -4
- data/lib/timerage/time_interval.rb +12 -2
- data/lib/timerage/version.rb +1 -1
- data/spec/timerage/time_interval_spec.rb +58 -6
- metadata +3 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd5297580375d5da0f4f8e0c5565cbe0b5e87bb27e01a3f6ab7b53e322f0836b
|
4
|
+
data.tar.gz: 1095aa363d5652855d905dfeeecc74291cdb4399c5769ac115c2bed2ad889043
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8114be85281560a2d7c08fad17ab9db72809b3a992cf2fff1433e6e4fe3e04673e9fa53bfa93070c4c1b3643bad913c550ca68d11f1ff2f04c2c4b04a9f8188
|
7
|
+
data.tar.gz: 701cd90ba28da27218c23f0346bc15d33c63646bf0a96d8f79ff39dc6a8fe55974fc848b5bca7266bfdf4fe6709fc70448242930e6ffd284f9519b04e40da4bf
|
@@ -77,7 +77,7 @@ module Timerage
|
|
77
77
|
# Returns an ISO8601 interval representation of self
|
78
78
|
# Takes same args as Time#iso8601
|
79
79
|
def iso8601(*args)
|
80
|
-
"#{self.begin
|
80
|
+
"#{self.begin&.iso8601(*args) || ".."}/#{self.end&.iso8601(*args) || ".."}"
|
81
81
|
end
|
82
82
|
|
83
83
|
def getutc
|
@@ -182,7 +182,17 @@ module Timerage
|
|
182
182
|
#
|
183
183
|
# Currently this only supports `<begin>/<end>` style time intervals.
|
184
184
|
def self.iso8601(str, exclusive_end: true)
|
185
|
-
|
185
|
+
str
|
186
|
+
.split("/", 2)
|
187
|
+
.tap { |it| fail ArgumentError, "Invalid iso8601 interval: #{str.inspect}" unless it.size == 2 }
|
188
|
+
.map {|s|
|
189
|
+
if s.strip == ".."
|
190
|
+
nil
|
191
|
+
else
|
192
|
+
Time.iso8601(s)
|
193
|
+
end
|
194
|
+
}
|
195
|
+
.then { |b, e| new(b, e, exclusive_end) }
|
186
196
|
|
187
197
|
rescue ArgumentError
|
188
198
|
raise ArgumentError, "Invalid iso8601 interval: #{str.inspect}"
|
data/lib/timerage/version.rb
CHANGED
@@ -18,12 +18,52 @@ describe Timerage::TimeInterval do
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
describe ".iso8601" do
|
22
|
-
specify
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
describe ".iso8601" do
|
22
|
+
specify do
|
23
|
+
expect(described_class.iso8601("2001-01-01T00:00:00Z/2001-01-02T00:00:00-06:00"))
|
24
|
+
.to be_kind_of described_class
|
25
|
+
end
|
26
|
+
|
27
|
+
specify do
|
28
|
+
expect{described_class.iso8601("2001-01-01T00:00:00Z")}
|
29
|
+
.to raise_error ArgumentError
|
30
|
+
end
|
31
|
+
|
32
|
+
specify do
|
33
|
+
expect(described_class.iso8601("2001-01-01T00:00:00Z/.."))
|
34
|
+
.to (be_kind_of described_class)
|
35
|
+
.and (have_attributes(begin: Time.parse("2001-01-01T00:00:00Z"), end: nil))
|
36
|
+
end
|
37
|
+
|
38
|
+
specify do
|
39
|
+
expect(described_class.iso8601("\t2001-01-01T00:00:00Z/..\t"))
|
40
|
+
.to (be_kind_of described_class)
|
41
|
+
.and (have_attributes(begin: Time.parse("2001-01-01T00:00:00Z"), end: nil))
|
42
|
+
end
|
43
|
+
|
44
|
+
specify do
|
45
|
+
expect(described_class.iso8601(" 2001-01-01T00:00:00Z/.. "))
|
46
|
+
.to (be_kind_of described_class)
|
47
|
+
.and (have_attributes(begin: Time.parse("2001-01-01T00:00:00Z"), end: nil))
|
48
|
+
end
|
49
|
+
|
50
|
+
specify do
|
51
|
+
expect(described_class.iso8601("../2001-01-01T00:00:00Z"))
|
52
|
+
.to (be_kind_of described_class)
|
53
|
+
.and (have_attributes(begin: nil, end: Time.parse("2001-01-01T00:00:00Z")))
|
54
|
+
end
|
55
|
+
|
56
|
+
specify do
|
57
|
+
expect(described_class.iso8601("\t../2001-01-01T00:00:00Z\t"))
|
58
|
+
.to (be_kind_of described_class)
|
59
|
+
.and (have_attributes(begin: nil, end: Time.parse("2001-01-01T00:00:00Z")))
|
60
|
+
end
|
61
|
+
|
62
|
+
specify do
|
63
|
+
expect(described_class.iso8601(" ../2001-01-01T00:00:00Z "))
|
64
|
+
.to (be_kind_of described_class)
|
65
|
+
.and (have_attributes(begin: nil, end: Time.parse("2001-01-01T00:00:00Z")))
|
66
|
+
end
|
27
67
|
end
|
28
68
|
|
29
69
|
describe "#getutc" do
|
@@ -66,6 +106,18 @@ describe Timerage::TimeInterval do
|
|
66
106
|
.to eq "#{interval.begin.iso8601(3)}/#{interval.end.iso8601(3)}" }
|
67
107
|
specify { expect( interval.duration).to eq duration }
|
68
108
|
|
109
|
+
context "open-ended intervals" do
|
110
|
+
subject(:interval) { described_class.new(now-duration, nil) }
|
111
|
+
specify { expect(interval.iso8601).to eq "#{interval.begin.iso8601}/.." }
|
112
|
+
specify { expect(interval.iso8601(3)).to eq "#{interval.begin.iso8601(3)}/.." }
|
113
|
+
end
|
114
|
+
|
115
|
+
context "open-start intervals" do
|
116
|
+
subject(:interval) { described_class.new(nil, now) }
|
117
|
+
specify { expect(interval.iso8601).to eq "../#{interval.end.iso8601}" }
|
118
|
+
specify { expect(interval.iso8601(3)).to eq "../#{interval.end.iso8601(3)}" }
|
119
|
+
end
|
120
|
+
|
69
121
|
specify { expect(interval.cover? interval.begin+1..interval.end-1).to be_truthy }
|
70
122
|
specify { expect(interval.cover? interval.begin...interval.end).to be_truthy }
|
71
123
|
specify { expect(interval.cover? interval.begin-1..interval.end-1).to be_falsy }
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timerage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Williams
|
8
8
|
- Chris Schneider
|
9
|
-
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
@@ -96,7 +95,6 @@ homepage: ''
|
|
96
95
|
licenses:
|
97
96
|
- MIT
|
98
97
|
metadata: {}
|
99
|
-
post_install_message:
|
100
98
|
rdoc_options: []
|
101
99
|
require_paths:
|
102
100
|
- lib
|
@@ -111,8 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
109
|
- !ruby/object:Gem::Version
|
112
110
|
version: '0'
|
113
111
|
requirements: []
|
114
|
-
rubygems_version: 3.
|
115
|
-
signing_key:
|
112
|
+
rubygems_version: 3.7.2
|
116
113
|
specification_version: 4
|
117
114
|
summary: Simple refinement to Range to allow Time or Date as arguments
|
118
115
|
test_files:
|