timerage 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 40613d0f6bc616f4623f8978981997ca2d67ffeb
4
- data.tar.gz: 287598ce1d9d8cb045f57a5921cbdaa083186af9
3
+ metadata.gz: a516908d80d7444bc7558fe488fe546aba2d123f
4
+ data.tar.gz: d3ca42c6b1190a24c9030f6e91cebb5844447c05
5
5
  SHA512:
6
- metadata.gz: d2eaa461baf4a4a4dbcded999f71a9b622934c58021c19fb127c1fc66a5c8c38741dabdeaa8a1a70a7e74fcaab6056dab8bf56ea9a2c7794ee5a423300786286
7
- data.tar.gz: c9d95fa2485232f2dc1da1d9b70ba056a5ca0877dbc2800e6f16e67b00beb834f6052262d80ecfd1f61a5ceb824c26020605b486e33a86f05a2fa00811c402fe
6
+ metadata.gz: aca0bf8520121da781d8e28a0f80974d619feba6f1e1a2f6b15055ff83e09489fc138a8dabfb47b594b43b738650294ed63ad089f9c2630e17a4467fc3c874d4
7
+ data.tar.gz: b73c86c3d951f1cd9571b63015647e67635d45a1cef8bec33d2794a213e08154765a0ea74575c7399a4e0dfd3522f5b0e651ef660b90624d0560233a25bfd6ba
@@ -101,6 +101,24 @@ module Timerage
101
101
  false
102
102
  end
103
103
 
104
+ # Returns a new TimeInterval that is the intersection of `self` and `other`.
105
+ def &(other)
106
+ fail ArgumentError, "#{other} does not overlap #{self}" unless self.overlap? other
107
+
108
+ new_begin = [self.begin, other.begin].max
109
+ new_end,ex_end = if self.end > other.end
110
+ [other.end, other.exclude_end?]
111
+ elsif self.end < other.end
112
+ [self.end, self.exclude_end?]
113
+ elsif self.exclude_end? || other.exclude_end?
114
+ [self.end, true]
115
+ else
116
+ [self.end, false]
117
+ end
118
+
119
+ self.class.new(new_begin, new_end, ex_end)
120
+ end
121
+
104
122
  protected
105
123
 
106
124
  def rangeish?(an_obj)
@@ -1,3 +1,3 @@
1
1
  module Timerage
2
- VERSION = "1.7.0"
2
+ VERSION = "1.8.0"
3
3
  end
@@ -51,6 +51,20 @@ describe Timerage::TimeInterval do
51
51
  specify { expect(interval <=> (interval.end+1..interval.end+2)).to eq -1}
52
52
  specify { expect(interval <=> interval).to eq 0}
53
53
 
54
+ describe "#&" do
55
+ specify { expect( interval & interval ).to eq interval }
56
+ specify { expect( interval & (interval.begin-1..interval.end+1) ).to eq interval }
57
+ specify { expect( interval & (interval.begin+1..interval.end+1) )
58
+ .to eq interval.begin+1..interval.end }
59
+ specify { expect( interval & (interval.begin-1..interval.end-1) )
60
+ .to eq interval.begin..interval.end-1 }
61
+ specify { expect( interval & (interval.begin...interval.end) ).to eq interval.begin...interval.end }
62
+ specify { expect( interval & (interval.begin...interval.end-1) )
63
+ .to eq interval.begin...interval.end-1 }
64
+ specify { expect( described_class.new(interval.begin...interval.end-1) & interval )
65
+ .to eq described_class.new(interval.begin...interval.end-1) }
66
+ end
67
+
54
68
  describe "==" do
55
69
  specify { expect( described_class.new(interval) == interval ).to be true }
56
70
  specify { expect( described_class.new(interval.begin, interval.end) == interval ).to be true }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timerage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Williams
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-07-21 00:00:00.000000000 Z
12
+ date: 2015-09-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  version: '0'
99
99
  requirements: []
100
100
  rubyforge_project:
101
- rubygems_version: 2.4.5
101
+ rubygems_version: 2.2.2
102
102
  signing_key:
103
103
  specification_version: 4
104
104
  summary: Simple refinement to Range to allow Time or Date as arguments
@@ -106,3 +106,4 @@ test_files:
106
106
  - spec/spec_helper.rb
107
107
  - spec/timerage/time_interval_spec.rb
108
108
  - spec/timerage_spec.rb
109
+ has_rdoc: