ranges_merger 0.1.0 → 0.2.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.
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: