rangeset 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rangeset/version.rb +1 -1
- data/lib/rangeset.rb +13 -2
- data/spec/rangeset/range_spec.rb +11 -0
- metadata +1 -1
data/lib/rangeset/version.rb
CHANGED
data/lib/rangeset.rb
CHANGED
@@ -1,8 +1,15 @@
|
|
1
|
+
lib_path = File.expand_path(File.join(File.dirname(__FILE__), '../lib'))
|
2
|
+
$:.unshift lib_path unless $:.any? { |path| path == lib_path }
|
3
|
+
|
1
4
|
require "rangeset/version"
|
2
5
|
require "rangeset/range"
|
3
6
|
|
4
7
|
class RangeSet
|
5
8
|
class << self
|
9
|
+
def [](*ranges)
|
10
|
+
build ranges
|
11
|
+
end
|
12
|
+
|
6
13
|
def build(ranges)
|
7
14
|
if ranges
|
8
15
|
if ranges.is_a? Array
|
@@ -69,8 +76,8 @@ class RangeSet
|
|
69
76
|
return [left, nil, nil] unless right
|
70
77
|
return [nil, nil, right] unless left
|
71
78
|
int = intersection(left, right)
|
72
|
-
in_left =
|
73
|
-
in_right =
|
79
|
+
in_left = difference left, int
|
80
|
+
in_right = difference right, int
|
74
81
|
[in_left, int, in_right]
|
75
82
|
end
|
76
83
|
end
|
@@ -173,4 +180,8 @@ class RangeSet
|
|
173
180
|
ranges == [other]
|
174
181
|
end)
|
175
182
|
end
|
183
|
+
|
184
|
+
def inspect
|
185
|
+
"RangeSet#{ ranges.inspect }"
|
186
|
+
end
|
176
187
|
end
|
data/spec/rangeset/range_spec.rb
CHANGED
@@ -35,5 +35,16 @@ describe Range do
|
|
35
35
|
subject.diff(other).should == [36..40, 30..35, 1..10]
|
36
36
|
end
|
37
37
|
end
|
38
|
+
|
39
|
+
context 'encompassing a RangeSet' do
|
40
|
+
subject { 0..8392 }
|
41
|
+
let(:other) { r = RangeSet[2089..2787, 2789..7266, 8371..8376, 8381..8382, 8384..8386, 8391..8392] }
|
42
|
+
it do
|
43
|
+
subject.diff(other).should == [
|
44
|
+
RangeSet[0..2088, 2788..2788, 7267..8370, 8377..8380, 8383..8383, 8387..8390],
|
45
|
+
RangeSet[2089..2787, 2789..7266, 8371..8376, 8381..8382, 8384..8386, 8391..8392],
|
46
|
+
nil]
|
47
|
+
end
|
48
|
+
end
|
38
49
|
end
|
39
50
|
end
|