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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d21955bc8e1453cafb40e1de151e67835964f857728eaa1cf001a7c70a79a1fb
4
- data.tar.gz: efc6d71d6fbc442b2fc3fa2066657cc51bc669549ad52a576ef09f14d29aa171
3
+ metadata.gz: dd5297580375d5da0f4f8e0c5565cbe0b5e87bb27e01a3f6ab7b53e322f0836b
4
+ data.tar.gz: 1095aa363d5652855d905dfeeecc74291cdb4399c5769ac115c2bed2ad889043
5
5
  SHA512:
6
- metadata.gz: 58064fee1d615adf865a0de63f0db64d7757af8b837c475d9ccf43018fd25574305250ef6ee525931ef9a7d5cdd1a69e203a13b4de22511ec9cafbc4e07a13e2
7
- data.tar.gz: 836ed39bef1dd174aa19e90a9f049a5bff4c88a79419aaf810470a698cdee2fb44aa41f17624a95fb440ee7ed31fad4aa1fdc53ed7fad8bef20e5c00cba8bf15
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.iso8601(*args)}/#{self.end.iso8601(*args)}"
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
- new *str.split("/", 2).map{|s| Time.iso8601(s)}, exclusive_end
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}"
@@ -1,3 +1,3 @@
1
1
  module Timerage
2
- VERSION = "2.3.0"
2
+ VERSION = "2.4.0"
3
3
  end
@@ -18,12 +18,52 @@ describe Timerage::TimeInterval do
18
18
  end
19
19
  end
20
20
 
21
- describe ".iso8601" do
22
- specify { expect(described_class
23
- .iso8601("2001-01-01T00:00:00Z/2001-01-02T00:00:00-06:00"))
24
- .to be_kind_of described_class }
25
- specify { expect{described_class.iso8601("2001-01-01T00:00:00Z")}
26
- .to raise_error ArgumentError }
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.3.0
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: 2024-11-08 00:00:00.000000000 Z
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.4.19
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: