range_list 1.3.0 → 1.3.1

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: 7ea59292d297f5583f7a9ceddaf8194cbd33704180c3e43f15fe87358c8d02d5
4
- data.tar.gz: f8ea601a80d2261c1b869aa57699bd0c71d048b4a94b25b978d67d1636d426b5
3
+ metadata.gz: bac3ba3fced62c57e3d3fafa0f1999667172d7083defe6ec6404ca8ecfb83af0
4
+ data.tar.gz: 12708960354b2930dd49ff8ee80e8b809340c8b8447953baac65351a914ad73b
5
5
  SHA512:
6
- metadata.gz: 52b7dd400bb94273b9e0ff1702db7d5bd328f88e425322ba3838cc859e4629f0f5f2776bcedec7f73ba90ca0936b8f661fd435bde89bf67bbfdede88c93f62b5
7
- data.tar.gz: af2aee3e2b4c37cdffbe89518423ea037b3348db50c9bfeff3b27259f6ff54f055265c3cbfb7c5ec7a9bc7410baa475e1d2f59be0259a5061b2e5197bd8e7280
6
+ metadata.gz: ebfdde12a2eca743326ffd44db017c23ff1ed796af325b4c0c0b1953cee76c427dd1a0ebf3d91e3a5674a2767332925881978292569fed01fca9ee30f5f55c28
7
+ data.tar.gz: dc711a4f3cf7a4157b11d9b0d7976f5411801f330daf7d501c427518434b3d3eb113f6d7aa3a65f019662bf230cf7f50f67b18266e4cc217ff3d6b2315d2c28b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- range_list (1.3.0)
4
+ range_list (1.3.1)
5
5
  rbtree (~> 0.4.5)
6
6
 
7
7
  GEM
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class RangeList
4
- VERSION = "1.3.0"
4
+ VERSION = "1.3.1"
5
5
  end
data/lib/range_list.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "range_list/version"
4
3
  require_relative "range_list/errors"
5
4
  require_relative "range_list/avl_tree/rbtree_adapter"
6
5
 
@@ -18,8 +17,6 @@ class RangeList
18
17
  # @raise [ArgumentError] when argement invalid
19
18
  def add(range)
20
19
  validate_range!(range)
21
-
22
- # Return when range is empty.
23
20
  return self if empty_range?(range)
24
21
 
25
22
  # Get real range start.
@@ -54,8 +51,6 @@ class RangeList
54
51
  # @raise (see #add)
55
52
  def remove(range)
56
53
  validate_range!(range)
57
-
58
- # Return when range is empty.
59
54
  return self if empty_range?(range)
60
55
 
61
56
  # Insert end lower range, `-1` means not include.
@@ -91,8 +86,6 @@ class RangeList
91
86
  # @raise (see #add)
92
87
  def contains_all?(range)
93
88
  validate_range!(range)
94
-
95
- # Return false when range is empty.
96
89
  return false if empty_range?(range)
97
90
 
98
91
  start_lower_range = avl_tree.lower_entry(range[0])
@@ -106,8 +99,6 @@ class RangeList
106
99
  # @raise (see #add)
107
100
  def contains_any?(range)
108
101
  validate_range!(range)
109
-
110
- # Return false when range is empty.
111
102
  return false if empty_range?(range)
112
103
 
113
104
  # `-1` means not include.
@@ -120,17 +111,19 @@ class RangeList
120
111
  # @return [Boolean]
121
112
  # @raise (see #add)
122
113
  def contains?(element)
123
- raise ArgumentError, "`element` should be `Integer` type." unless element.is_a?(Integer)
114
+ validate_element!(element)
124
115
 
125
116
  lower_entry = avl_tree.lower_entry(element)
126
117
  !lower_entry.nil? && lower_entry[1] > element
127
118
  end
128
119
 
129
120
  # Give RangeList iterative ability.
121
+ # @return [RangeList, Enumerator]
130
122
  # @yield [range_start, range_end] give the range element to the block
131
123
  def each(&block)
132
124
  if block
133
125
  avl_tree.each(&block)
126
+ self
134
127
  else
135
128
  enum_for(:each)
136
129
  end
@@ -138,9 +131,13 @@ class RangeList
138
131
 
139
132
  # @!visibility private
140
133
  def inspect
141
- to_a.inspect
134
+ data = map { |k, v| "[#{k}, #{v})" }.join(", ")
135
+ "[#{data}]"
142
136
  end
143
137
 
138
+ # @!visibility private
139
+ alias_method :to_s, :inspect
140
+
144
141
  private
145
142
 
146
143
  attr_reader :avl_tree
@@ -151,6 +148,10 @@ class RangeList
151
148
  raise ArgumentError, "All elements of `range` should be `Integer`." unless range.all? { |item| item.is_a?(Integer) }
152
149
  end
153
150
 
151
+ def validate_element!(element)
152
+ raise ArgumentError, "`element` should be `Integer` type." unless element.is_a?(Integer)
153
+ end
154
+
154
155
  def empty_range?(range)
155
156
  range[0] >= range[1]
156
157
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: range_list
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Song Huang