ranges_merger 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -2,23 +2,9 @@
2
2
 
3
3
  Very simple gem for merging range-like objects.
4
4
 
5
- == How to use
5
+ == How to use, simple merge
6
6
 
7
- Please use range-like object converted to format [[from, to], [from, to], ...].
8
-
9
- If you want to merge 2 ranges please use code just like below.
10
-
11
- a = [1, 3]
12
-
13
- b = [2, 4]
14
-
15
- result = RangesMerger.two_way_merge([a, b])
16
-
17
- # => result = [[1, 4]]
18
-
19
-
20
-
21
- If you want to merge more than 2 ranges please use code just like below.
7
+ If you want to merge please use code just like below.
22
8
 
23
9
  a = [1, 3]
24
10
 
@@ -28,9 +14,9 @@ If you want to merge more than 2 ranges please use code just like below.
28
14
 
29
15
  result = RangesMerger.merge([a, b, c])
30
16
 
31
- # => result = [[1, 6]]
32
-
17
+ # result => [[1, 6]]
33
18
 
19
+ == Range objects
34
20
 
35
21
  If you want to merge Range objects.
36
22
 
@@ -46,8 +32,49 @@ If you want to merge Range objects.
46
32
 
47
33
  result = RangesMerger.merge(ranges)
48
34
 
49
- # => result = [(1..3),(5..8)]
35
+ # result => [(1..3),(5..8)]
36
+
37
+ == Exclusion
38
+
39
+ If you want to exclude please use code just like below.
40
+
41
+ First - base:
42
+
43
+ a = [1, 3]
44
+
45
+ b = [3, 5]
46
+
47
+ c = [9, 11]
48
+
49
+ Seconds - exclusions:
50
+
51
+ x = [2, 4]
52
+
53
+ y = [4, 10]
54
+
55
+ And run some processing
56
+
57
+ result = RangesMerger.exclude([a, b, c], [x, y])
58
+
59
+ # result => [[1, 2], [10, 11]]
60
+
61
+ == I want an instance
62
+
63
+ If you want to have instance, add and remove ranges as you wish just do something like that:
64
+
65
+ r = RangesMerger.new
66
+
67
+ r += [[1, 10]]
68
+
69
+ r += [[8, 15]]
70
+
71
+ # r.to_array => [[1, 15]]
72
+
73
+ r -= [[2, 4]]
74
+
75
+ r -= [[11, 12]]
50
76
 
77
+ # r.to_array => [[1, 2], [4,11], [12,15]]
51
78
 
52
79
 
53
80
  == Contributing to ranges_merger
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -0,0 +1,88 @@
1
+ module RangesMergerExclusion
2
+
3
+ def exclude(_array_a, _array_b)
4
+ new_array = Array.new
5
+
6
+ # array of bases
7
+ bases = merge(_array_a)
8
+
9
+ # loop for "base"
10
+ i = 0
11
+ while i < bases.size
12
+ base = bases[i]
13
+
14
+ # loop for "exclusions"
15
+ _array_b.each do |b|
16
+ # base can be excluded to this level that is empty
17
+ if not base.nil?
18
+ result = two_way_exclusion([base, b])
19
+ if result.size == 1
20
+ base = two_way_exclusion([base, b])[0]
21
+ elsif result.size == 2
22
+ # first go to processing, last go to base pool
23
+ base = result[0]
24
+ bases << result[1]
25
+ elsif result.size == 0
26
+ base = nil
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+ new_array << base if not base.nil?
33
+ i += 1
34
+ end
35
+
36
+ return merge(new_array)
37
+ end
38
+
39
+ # Merge two Arrays
40
+ def two_way_exclusion(_array)
41
+ base_from = _array[0][0]
42
+ base_to = _array[0][1]
43
+
44
+ excl_from = _array[1][0]
45
+ excl_to = _array[1][1]
46
+
47
+ # puts "base_from #{base_from} base_to #{base_to} excl_from #{excl_from} excl_to #{excl_to}"
48
+
49
+ # 1A. BASE < EXCL
50
+ if (base_to < excl_to and base_from < excl_from and base_to < excl_from)
51
+ # puts "1a"
52
+ return [[base_from, base_to]]
53
+ end
54
+
55
+ # 1B. BASE > EXCL
56
+ if (base_to > excl_to and base_from > excl_from and excl_to < base_from)
57
+ # puts "1b"
58
+ return [[base_from, base_to]]
59
+ end
60
+
61
+ # 2 EXCL contains BASE => nothing
62
+ if base_from >= excl_from and base_to <= excl_to
63
+ # puts "2"
64
+ return []
65
+ end
66
+
67
+ # 3 EXCL inside BASE
68
+ if excl_from > base_from and excl_to < base_to
69
+ # puts "3"
70
+ return [[base_from, excl_from], [excl_to, base_to]]
71
+ end
72
+
73
+ # 4A EXCL has inside BASE from
74
+ if excl_from <= base_from and excl_to >= base_from
75
+ # puts "4a"
76
+ return [[excl_to, base_to]]
77
+ end
78
+
79
+ # 4b EXCL has inside BASE to
80
+ if excl_from <= base_to and excl_to >= base_from
81
+ # puts "4b"
82
+ return [[base_from, excl_from]]
83
+ end
84
+
85
+ raise 'Not implemented, is it even possible?'
86
+ end
87
+
88
+ end
@@ -0,0 +1,108 @@
1
+ module RangesMergerMerging
2
+
3
+ # Merge for various objects (Array, Range). Result is
4
+ def merge(_array)
5
+ klass = _array.first.class
6
+ array = self.normalize_array(_array)
7
+ result = self.merge_loop(array)
8
+
9
+ if klass.to_s == "Range"
10
+ return self.array_to_ranges(result)
11
+ end
12
+
13
+ return result
14
+ end
15
+
16
+ protected
17
+
18
+ # Merge loop for merging Array of Arrays
19
+ def merge_loop(_array)
20
+ return _array if _array.size <= 1
21
+ return self.two_way_merge(_array) if _array.size == 2
22
+
23
+ before = _array
24
+ while true do
25
+ after = self.merge_array(_array)
26
+ return after if before == after or not check_overlaps(after)
27
+ before = after
28
+ end
29
+ end
30
+
31
+ # Merging phase
32
+ def merge_array(_array)
33
+ return _array if _array.size <= 1
34
+ sorted = _array.sort { |a, b| a[0] <=> b[0] }.uniq
35
+
36
+ i = 1
37
+ while i < sorted.size do
38
+ to_merge = [sorted[i-1], sorted[i]]
39
+ # puts "merging #{to_merge.inspect}"
40
+
41
+ result = self.two_way_merge(to_merge)
42
+ # puts "merged #{result.inspect}"
43
+
44
+ sorted[i-1] = result[0]
45
+
46
+ if result.size == 1
47
+ sorted[i] = nil
48
+ sorted.delete_if { |s| s.nil? }
49
+ else
50
+ i += 1
51
+ end
52
+ end
53
+
54
+ return sorted
55
+ end
56
+
57
+ # Check if there are overlaps in Array
58
+ def check_overlaps(_array)
59
+ sorted = _array.sort { |a, b| a[0] <=> b[0] }.uniq
60
+
61
+ (1...sorted.size).each do |i|
62
+ return true if sorted[i][0] <= sorted[i-1][0]
63
+ return true if sorted[i][0] <= sorted[i-1][1]
64
+ end
65
+ return false
66
+ end
67
+
68
+ # Merge two Arrays
69
+ def two_way_merge(_array)
70
+ a_from = _array[0][0]
71
+ b_from = _array[1][0]
72
+ a_to = _array[0][1]
73
+ b_to = _array[1][1]
74
+
75
+ # 1A. outside each other A > B
76
+ if (a_to < b_to and a_from < b_from and a_to < b_from)
77
+ return [[a_from, a_to], [b_from, b_to]]
78
+ end
79
+
80
+ # 1B. outside each other B > A
81
+ if (a_to > b_to and a_from > b_from and b_to < a_from)
82
+ return [[b_from, b_to], [a_from, a_to]]
83
+ end
84
+
85
+ # 2A. A is inside B
86
+ if a_from >= b_from and a_to <= b_to
87
+ return [[b_from, b_to]]
88
+ end
89
+
90
+ # 2B. B is inside A
91
+ if b_from >= a_from and b_to <= a_to
92
+ return [[a_from, a_to]]
93
+ end
94
+
95
+ # 3A. overlapping, A < B
96
+ if a_from < b_from and a_to < b_to and a_to >= b_from
97
+ return [[a_from, b_to]]
98
+ end
99
+
100
+ # 3B. overlapping, B < A
101
+ if b_from < a_from and b_to < a_to and b_to >= a_from
102
+ return [[b_from, a_to]]
103
+ end
104
+
105
+ raise 'Not implemented, is it even possible?'
106
+ end
107
+
108
+ end
@@ -0,0 +1,18 @@
1
+ module RangesMergerUtils
2
+ # Convert Array of Arrays or Ranges to Array of Arrays
3
+ def normalize_array(_array)
4
+ klass = _array.first.class
5
+ if klass.to_s == "Array"
6
+ return self.merge_loop(_array)
7
+ elsif klass.to_s == "Range"
8
+ return _array.collect { |a| [a.first, a.last] }
9
+ else
10
+ return []
11
+ end
12
+ end
13
+
14
+ # Convert Array of Arrays to Array of Ranges
15
+ def array_to_ranges(_array)
16
+ _array.collect { |r| Range.new(r[0], r[1]) }
17
+ end
18
+ end
data/lib/ranges_merger.rb CHANGED
@@ -1,102 +1,44 @@
1
- class RangesMerger
1
+ require 'ranges_merger/ranges_merger_merging'
2
+ require 'ranges_merger/ranges_merger_utils'
3
+ require 'ranges_merger/ranges_merger_exclusion'
2
4
 
3
- # Merge for various objects (Array, Range)
4
- def self.merge(_array)
5
- klass = _array.first.class
5
+ class RangesMerger
6
+ extend RangesMergerMerging
7
+ extend RangesMergerUtils
8
+ extend RangesMergerExclusion
6
9
 
7
- if klass.to_s == "Array"
8
- return self.merge_loop(_array)
9
- elsif klass.to_s == "Range"
10
- result = self.merge_loop( _array.collect{|a| [a.first, a.last]} )
11
- return result.collect{|r| Range.new(r[0], r[1])}
12
- else
13
- return []
14
- end
10
+ attr_reader :ranges
15
11
 
12
+ def initialize(_array = [])
13
+ @ranges = self.class.merge(
14
+ self.class.normalize_array(_array)
15
+ )
16
16
  end
17
17
 
18
- # Merge loop
19
- def self.merge_loop(_array)
20
- before = _array
21
- while true do
22
- after = self.merge_array(_array)
23
- return after if before == after or not check_overlaps(after)
24
- before = after
25
- end
18
+ def add(_array)
19
+ @ranges = self.class.merge(@ranges + _array)
20
+ return self
26
21
  end
27
22
 
28
- def self.merge_array(_array)
29
- return _array if _array.size <= 1
30
- sorted = _array.sort { |a, b| a[0] <=> b[0] }.uniq
31
-
32
- i = 1
33
- while i < sorted.size do
34
- to_merge = [sorted[i-1], sorted[i]]
35
- # puts "merging #{to_merge.inspect}"
36
-
37
- result = self.two_way_merge(to_merge)
38
- # puts "merged #{result.inspect}"
39
-
40
- sorted[i-1] = result[0]
41
-
42
- if result.size == 1
43
- sorted[i] = nil
44
- sorted.delete_if { |s| s.nil? }
45
- else
46
- i += 1
47
- end
48
- end
49
-
50
- return sorted
23
+ def +(_array)
24
+ add(_array)
51
25
  end
52
26
 
53
- # Check if there are overlaps in Array
54
- def self.check_overlaps(_array)
55
- sorted = _array.sort { |a, b| a[0] <=> b[0] }.uniq
56
-
57
- (1...sorted.size).each do |i|
58
- return true if sorted[i][0] <= sorted[i-1][0]
59
- return true if sorted[i][0] <= sorted[i-1][1]
60
- end
61
- return false
27
+ def remove(_array)
28
+ @ranges = self.class.exclude(@ranges, _array)
29
+ return self
62
30
  end
63
31
 
64
- def self.two_way_merge(_array)
65
- a_from = _array[0][0]
66
- b_from = _array[1][0]
67
- a_to = _array[0][1]
68
- b_to = _array[1][1]
69
-
70
- # 1A. outside each other A > B
71
- if (a_to < b_to and a_from < b_from and a_to < b_from)
72
- return [[a_from, a_to], [b_from, b_to]]
73
- end
74
-
75
- # 1B. outside each other B > A
76
- if (a_to > b_to and a_from > b_from and b_to < a_from)
77
- return [[b_from, b_to], [a_from, a_to]]
78
- end
79
-
80
- # 2A. A is inside B
81
- if a_from >= b_from and a_to <= b_to
82
- return [[b_from, b_to]]
83
- end
84
-
85
- # 2B. B is inside A
86
- if b_from >= a_from and b_to <= a_to
87
- return [[a_from, a_to]]
88
- end
89
-
90
- # 3A. overlapping, A < B
91
- if a_from < b_from and a_to < b_to and a_to >= b_from
92
- return [[a_from, b_to]]
93
- end
32
+ def -(_array)
33
+ remove(_array)
34
+ end
94
35
 
95
- # 3B. overlapping, B < A
96
- if b_from < a_from and b_to < a_to and b_to >= a_from
97
- return [[b_from, a_to]]
98
- end
36
+ def to_ranges
37
+ self.class.array_to_ranges(@ranges)
38
+ end
99
39
 
100
- raise 'Not implemented'
40
+ def to_array
41
+ @ranges
101
42
  end
43
+
102
44
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "ranges_merger"
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Aleksander Kwiatkowski"]
12
- s.date = "2011-12-04"
12
+ s.date = "2011-12-06"
13
13
  s.description = "Simple gem used for merging range-like objects. If you have problems with operations on ranges this gem can save you some time."
14
14
  s.email = "bobikx@poczta.fm"
15
15
  s.extra_rdoc_files = [
@@ -27,6 +27,9 @@ Gem::Specification.new do |s|
27
27
  "Rakefile",
28
28
  "VERSION",
29
29
  "lib/ranges_merger.rb",
30
+ "lib/ranges_merger/ranges_merger_exclusion.rb",
31
+ "lib/ranges_merger/ranges_merger_merging.rb",
32
+ "lib/ranges_merger/ranges_merger_utils.rb",
30
33
  "ranges_merger.gemspec",
31
34
  "spec/ranges_merger_spec.rb",
32
35
  "spec/spec_helper.rb"
@@ -1,17 +1,20 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "RangesMerger" do
4
+
5
+ # Merging
6
+
4
7
  it "should merge 2 overlapping ranges" do
5
8
  a = [1, 3]
6
9
  b = [2, 4]
7
- result = RangesMerger.two_way_merge([a, b])
10
+ result = RangesMerger.merge([a, b])
8
11
  result.should == [[1, 4]]
9
12
  end
10
13
 
11
14
  it "should merge 2 overlapping ranges" do
12
15
  a = [2, 4]
13
16
  b = [1, 3]
14
- result = RangesMerger.two_way_merge([a, b])
17
+ result = RangesMerger.merge([a, b])
15
18
  result.should == [[1, 4]]
16
19
  end
17
20
 
@@ -19,7 +22,7 @@ describe "RangesMerger" do
19
22
  b = [1, 3]
20
23
  a = [5, 6]
21
24
  # it sorts :)
22
- result = RangesMerger.two_way_merge([a, b])
25
+ result = RangesMerger.merge([a, b])
23
26
  result.should == [[1, 3], [5, 6]]
24
27
  result.should_not == [[5, 6], [1, 3]]
25
28
  end
@@ -27,28 +30,28 @@ describe "RangesMerger" do
27
30
  it "should merge 2 not overlapping ranges" do
28
31
  a = [1, 3]
29
32
  b = [5, 6]
30
- result = RangesMerger.two_way_merge([a, b])
33
+ result = RangesMerger.merge([a, b])
31
34
  result.should == [[1, 3], [5, 6]]
32
35
  end
33
36
 
34
37
  it "should merge 2 identical ranges" do
35
38
  a = [1, 2]
36
39
  b = [1, 2]
37
- result = RangesMerger.two_way_merge([a, b])
40
+ result = RangesMerger.merge([a, b])
38
41
  result.should == [[1, 2]]
39
42
  end
40
43
 
41
44
  it "should merge 2 ranges, A within B" do
42
45
  a = [1, 5]
43
46
  b = [2, 3]
44
- result = RangesMerger.two_way_merge([a, b])
47
+ result = RangesMerger.merge([a, b])
45
48
  result.should == [[1, 5]]
46
49
  end
47
50
 
48
51
  it "should merge 2 ranges, B within A" do
49
52
  b = [1, 5]
50
53
  a = [2, 3]
51
- result = RangesMerger.two_way_merge([a, b])
54
+ result = RangesMerger.merge([a, b])
52
55
  result.should == [[1, 5]]
53
56
  end
54
57
 
@@ -105,7 +108,7 @@ describe "RangesMerger" do
105
108
  it "should do the readme code" do
106
109
  a = [1, 3]
107
110
  b = [2, 4]
108
- result = RangesMerger.two_way_merge([a, b])
111
+ result = RangesMerger.merge([a, b])
109
112
  result.should == [[1, 4]]
110
113
 
111
114
  a = [1, 3]
@@ -142,8 +145,137 @@ describe "RangesMerger" do
142
145
  (5..8)
143
146
  ]
144
147
  result = RangesMerger.merge(ranges)
145
- result.should == [(1..3),(5..8)]
148
+ result.should == [(1..3), (5..8)]
149
+ end
150
+
151
+
152
+ #Exclusion
153
+
154
+ it "should exclude ranges 'inside' range" do
155
+ result = RangesMerger.exclude([[1, 4]], [[2, 3]])
156
+ result.should == [[1, 2], [3, 4]]
157
+ end
158
+
159
+ it "should exclude ranges at right end" do
160
+ result = RangesMerger.exclude([[1, 4]], [[3, 4]])
161
+ result.should == [[1, 3]]
162
+ end
163
+
164
+ it "should exclude ranges at left end" do
165
+ result = RangesMerger.exclude([[1, 4]], [[1, 2]])
166
+ result.should == [[2, 4]]
167
+ end
168
+
169
+ it "should exclude ranges 'outside' range" do
170
+ result = RangesMerger.exclude([[1, 4]], [[0, 5]])
171
+ result.should == []
172
+ end
173
+
174
+ it "should not exclude ranges because exclude range is 'outside' base range" do
175
+ result = RangesMerger.exclude([[1, 4]], [[5, 6]])
176
+ result.should == [[1, 4]]
177
+ end
178
+
179
+ it "should exclude using many ranges (1)" do
180
+ result = RangesMerger.exclude([[1, 2], [3, 4], [5, 6]], [[2, 5]])
181
+ result.should == [[1, 2], [5, 6]]
182
+ end
183
+
184
+ it "should exclude using many ranges (2)" do
185
+ result = RangesMerger.exclude([[1, 2], [3, 4], [5, 6]], [[1, 6]])
186
+ result.should == []
187
+ end
188
+
189
+ it "should exclude using many ranges (3)" do
190
+ result = RangesMerger.exclude([[1, 2], [3, 4], [5, 6]], [[2, 3], [4, 5]])
191
+ result.should == [[1, 2], [3, 4], [5, 6]]
192
+ end
193
+
194
+ it "should exclude using many ranges (4)" do
195
+ result = RangesMerger.exclude([[1, 10]], [[2, 3], [4, 5], [6, 7]])
196
+ result.should == [[1, 2], [3, 4], [5, 6], [7, 10]]
146
197
  end
147
198
 
199
+ it "should exclude using many ranges (5)" do
200
+ result = RangesMerger.exclude([[1, 4], [6, 10]], [[4, 6]])
201
+ result.should == [[1, 4], [6, 10]]
202
+ end
203
+
204
+ it "should exclude using many ranges (6)" do
205
+ result = RangesMerger.exclude([[1, 4], [6, 10]], [[3, 7]])
206
+ result.should == [[1, 3], [7, 10]]
207
+ end
208
+
209
+ it "should exclude using many ranges (7)" do
210
+ result = RangesMerger.exclude([[1, 4], [6, 10]], [[0, 7]])
211
+ result.should == [[7, 10]]
212
+ end
213
+
214
+ it "should exclude using many ranges (8)" do
215
+ result = RangesMerger.exclude([[1, 4], [6, 10]], [[8, 8]])
216
+ result.should == [[1, 4], [6, 10]]
217
+ end
218
+
219
+ it "should exclude using many ranges (8)" do
220
+ result = RangesMerger.exclude([[1, 3], [3, 5], [9, 11]], [[2, 4], [4, 10]])
221
+ result.should == [[1, 2], [10, 11]]
222
+ end
223
+
224
+ # Instance
225
+
226
+ it "should create instance, add 2 ranges and process them to array format (using add method)" do
227
+ r = RangesMerger.new
228
+ r.add [[1, 2]]
229
+ r.add [[2, 3]]
230
+ r.kind_of?(RangesMerger).should
231
+ r.to_array.should == [[1, 3]]
232
+ end
233
+
234
+ it "should create instance, add 2 ranges and process them to array format (using plus operator)" do
235
+ r = RangesMerger.new
236
+ r += [[1, 2]]
237
+ r += [[2, 3]]
238
+ r.kind_of?(RangesMerger).should
239
+ r.to_array.should == [[1, 3]]
240
+ end
241
+
242
+
243
+ it "should create instance, add 2 ranges, remove 2 and process them to array format (using add/remove method)" do
244
+ r = RangesMerger.new
245
+ r.add [[1, 10]]
246
+ r.add [[8, 15]]
247
+ r.to_array.should == [[1, 15]]
248
+
249
+ r.remove [[2, 4]]
250
+ r.remove [[11, 12]]
251
+ r.kind_of?(RangesMerger).should
252
+ r.to_array.should == [[1, 2], [4, 11], [12, 15]]
253
+ end
254
+
255
+ it "should create instance, add 2 ranges, remove 2 and process them to array format (using plus/minus operator)" do
256
+ r = RangesMerger.new
257
+ r += [[1, 10]]
258
+ r += [[8, 15]]
259
+ r.to_array.should == [[1, 15]]
260
+
261
+ r -= [[2, 4]]
262
+ r -= [[11, 12]]
263
+ r.kind_of?(RangesMerger).should
264
+ r.to_array.should == [[1, 2], [4, 11], [12, 15]]
265
+ end
266
+
267
+ it "should create instance, mixed test" do
268
+ r = RangesMerger.new
269
+ r += [[10, 50]]
270
+ r.to_array.should == [[10, 50]]
271
+ r -= [[15, 30]]
272
+ r.to_array.should == [[10, 15], [30, 50]]
273
+ r += [[0, 20]]
274
+ r.to_array.should == [[0, 20], [30, 50]]
275
+ r -= [[2, 5]]
276
+ r.to_array.should == [[0, 2], [5, 20], [30, 50]]
277
+ r += [[-2, 3]]
278
+ r.to_array.should == [[-2, 3], [5, 20], [30, 50]]
279
+ end
148
280
 
149
281
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ranges_merger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-04 00:00:00.000000000Z
12
+ date: 2011-12-06 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &75213000 !ruby/object:Gem::Requirement
16
+ requirement: &83398430 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.3.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *75213000
24
+ version_requirements: *83398430
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &75212750 !ruby/object:Gem::Requirement
27
+ requirement: &83398180 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *75212750
35
+ version_requirements: *83398180
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &75212470 !ruby/object:Gem::Requirement
38
+ requirement: &83397940 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.6.4
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *75212470
46
+ version_requirements: *83397940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rcov
49
- requirement: &75212230 !ruby/object:Gem::Requirement
49
+ requirement: &83333790 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *75212230
57
+ version_requirements: *83333790
58
58
  description: Simple gem used for merging range-like objects. If you have problems
59
59
  with operations on ranges this gem can save you some time.
60
60
  email: bobikx@poczta.fm
@@ -74,6 +74,9 @@ files:
74
74
  - Rakefile
75
75
  - VERSION
76
76
  - lib/ranges_merger.rb
77
+ - lib/ranges_merger/ranges_merger_exclusion.rb
78
+ - lib/ranges_merger/ranges_merger_merging.rb
79
+ - lib/ranges_merger/ranges_merger_utils.rb
77
80
  - ranges_merger.gemspec
78
81
  - spec/ranges_merger_spec.rb
79
82
  - spec/spec_helper.rb
@@ -92,7 +95,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
95
  version: '0'
93
96
  segments:
94
97
  - 0
95
- hash: 63330927
98
+ hash: -671424623
96
99
  required_rubygems_version: !ruby/object:Gem::Requirement
97
100
  none: false
98
101
  requirements: