set 1.0.2 → 1.0.4
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 +4 -4
- data/.github/CODEOWNERS +1 -0
- data/.github/dependabot.yml +6 -0
- data/.github/workflows/test.yml +2 -2
- data/CHANGELOG.md +15 -0
- data/lib/set.rb +59 -59
- data/set.gemspec +10 -3
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0553df841f04a61495ba77ce0545d0cf8fe2317a8d4113235bc0ffed4a798f9
|
4
|
+
data.tar.gz: a0f42b54d9f2d61932e9b781a8adc33e7fa28eef1e0fe646d51e4cb8a10aac9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96305ae873bfaf18381f91252201245ef4322ada12644358f0d8d310c54722dac39d6c79b26a270322931d9d4848955542acc3912ec57c75b57bca38994806c3
|
7
|
+
data.tar.gz: 77adbb45986b8203e9e11da2e0eea741b36903a2017c4d5d1898b9700b82ec19e1bbff27883e3c485e991cdc67b3f0bde9582605c0a84ed1fc9322409ddad284
|
data/.github/CODEOWNERS
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* @knu
|
data/.github/workflows/test.yml
CHANGED
@@ -7,11 +7,11 @@ jobs:
|
|
7
7
|
name: build (${{ matrix.ruby }} / ${{ matrix.os }})
|
8
8
|
strategy:
|
9
9
|
matrix:
|
10
|
-
ruby: [ 2.
|
10
|
+
ruby: [ 3.2, 3.1, "3.0", 2.7, head ]
|
11
11
|
os: [ ubuntu-latest, macos-latest ]
|
12
12
|
runs-on: ${{ matrix.os }}
|
13
13
|
steps:
|
14
|
-
- uses: actions/checkout@
|
14
|
+
- uses: actions/checkout@v4
|
15
15
|
- name: Set up Ruby
|
16
16
|
uses: ruby/setup-ruby@v1
|
17
17
|
with:
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Set Changelog
|
2
2
|
|
3
|
+
# 1.0.4 (2023-12-08)
|
4
|
+
|
5
|
+
* Enhancements
|
6
|
+
* Avoid the `block or return` pattern to save Proc allocations [#29][] ([@casperisfine][])
|
7
|
+
* Set#merge takes many enumerable objects [#30][]
|
8
|
+
|
9
|
+
# 1.0.3 (2022-09-06)
|
10
|
+
|
11
|
+
* Enhancements
|
12
|
+
* Make Set a builtin feature \[[Feature #16989][]]
|
13
|
+
|
3
14
|
# 1.0.2 (2021-10-25)
|
4
15
|
|
5
16
|
* Enhancements
|
@@ -31,9 +42,13 @@ This is the first release of set as a gem. Here lists the changes since the ver
|
|
31
42
|
[#17]: https://github.com/ruby/set/pull/17
|
32
43
|
[#18]: https://github.com/ruby/set/pull/18
|
33
44
|
[#20]: https://github.com/ruby/set/pull/20
|
45
|
+
[#29]: https://github.com/ruby/set/pull/29
|
46
|
+
[#30]: https://github.com/ruby/set/pull/30
|
34
47
|
[Feature #17838]: https://bugs.ruby-lang.org/issues/17838
|
48
|
+
[Feature #16989]: https://bugs.ruby-lang.org/issues/16989
|
35
49
|
|
36
50
|
[@BurdetteLamar]: https://github.com/BurdetteLamar
|
51
|
+
[@casperisfine]: https://github.com/casperisfine
|
37
52
|
[@jeremyevans]: https://github.com/jeremyevans
|
38
53
|
[@k-tsj]: https://github.com/k-tsj
|
39
54
|
[@knu]: https://github.com/knu
|
data/lib/set.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# set.rb - defines the Set class
|
5
5
|
#
|
6
|
-
# Copyright (c) 2002-
|
6
|
+
# Copyright (c) 2002-2023 Akinori MUSHA <knu@iDaemons.org>
|
7
7
|
#
|
8
8
|
# Documentation by Akinori MUSHA and Gavin Sinclair.
|
9
9
|
#
|
@@ -12,16 +12,12 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
##
|
15
|
-
# This library provides the Set class, which
|
16
|
-
# of unordered values with no duplicates.
|
15
|
+
# This library provides the Set class, which implements a collection
|
16
|
+
# of unordered values with no duplicates. It is a hybrid of Array's
|
17
17
|
# intuitive inter-operation facilities and Hash's fast lookup.
|
18
18
|
#
|
19
19
|
# The method `to_set` is added to Enumerable for convenience.
|
20
20
|
#
|
21
|
-
# Set implements a collection of unordered values with no duplicates.
|
22
|
-
# This is a hybrid of Array's intuitive inter-operation facilities and
|
23
|
-
# Hash's fast lookup.
|
24
|
-
#
|
25
21
|
# Set is easy to use with Enumerable objects (implementing `each`).
|
26
22
|
# Most of the initializer methods and binary operators accept generic
|
27
23
|
# Enumerable objects besides sets and arrays. An Enumerable object
|
@@ -88,138 +84,140 @@
|
|
88
84
|
#
|
89
85
|
# ### Methods for Creating a \Set
|
90
86
|
#
|
91
|
-
# - ::[]
|
87
|
+
# - ::[]:
|
92
88
|
# Returns a new set containing the given objects.
|
93
|
-
# - ::new
|
89
|
+
# - ::new:
|
94
90
|
# Returns a new set containing either the given objects
|
95
91
|
# (if no block given) or the return values from the called block
|
96
92
|
# (if a block given).
|
97
93
|
#
|
98
94
|
# ### Methods for \Set Operations
|
99
95
|
#
|
100
|
-
# - [|](#method-i-7C) (aliased as #union and #+)
|
96
|
+
# - [|](#method-i-7C) (aliased as #union and #+):
|
101
97
|
# Returns a new set containing all elements from +self+
|
102
98
|
# and all elements from a given enumerable (no duplicates).
|
103
|
-
# - [&](#method-i-26) (aliased as #intersection)
|
99
|
+
# - [&](#method-i-26) (aliased as #intersection):
|
104
100
|
# Returns a new set containing all elements common to +self+
|
105
101
|
# and a given enumerable.
|
106
|
-
# - [-](#method-i-2D) (aliased as #difference)
|
102
|
+
# - [-](#method-i-2D) (aliased as #difference):
|
107
103
|
# Returns a copy of +self+ with all elements
|
108
104
|
# in a given enumerable removed.
|
109
|
-
# - [\^](#method-i-5E)
|
105
|
+
# - [\^](#method-i-5E):
|
110
106
|
# Returns a new set containing all elements from +self+
|
111
107
|
# and a given enumerable except those common to both.
|
112
108
|
#
|
113
109
|
# ### Methods for Comparing
|
114
110
|
#
|
115
|
-
# - [<=>](#method-i-3C-3D-3E)
|
111
|
+
# - [<=>](#method-i-3C-3D-3E):
|
116
112
|
# Returns -1, 0, or 1 as +self+ is less than, equal to,
|
117
113
|
# or greater than a given object.
|
118
|
-
# - [==](#method-i-3D-3D)
|
114
|
+
# - [==](#method-i-3D-3D):
|
119
115
|
# Returns whether +self+ and a given enumerable are equal,
|
120
116
|
# as determined by Object#eql?.
|
121
|
-
# - \#compare_by_identity
|
117
|
+
# - \#compare_by_identity?:
|
122
118
|
# Returns whether the set considers only identity
|
123
119
|
# when comparing elements.
|
124
120
|
#
|
125
121
|
# ### Methods for Querying
|
126
122
|
#
|
127
|
-
# - \#length (aliased as #size)
|
123
|
+
# - \#length (aliased as #size):
|
128
124
|
# Returns the count of elements.
|
129
|
-
# - \#empty
|
125
|
+
# - \#empty?:
|
130
126
|
# Returns whether the set has no elements.
|
131
|
-
# - \#include? (aliased as #member? and #===)
|
127
|
+
# - \#include? (aliased as #member? and #===):
|
132
128
|
# Returns whether a given object is an element in the set.
|
133
|
-
# - \#subset? (aliased as [<=](#method-i-3C-3D))
|
129
|
+
# - \#subset? (aliased as [<=](#method-i-3C-3D)):
|
134
130
|
# Returns whether a given object is a subset of the set.
|
135
|
-
# - \#proper_subset? (aliased as [<](#method-i-3C))
|
131
|
+
# - \#proper_subset? (aliased as [<](#method-i-3C)):
|
136
132
|
# Returns whether a given enumerable is a proper subset of the set.
|
137
|
-
# - \#superset? (aliased as [
|
133
|
+
# - \#superset? (aliased as [>=](#method-i-3E-3D])):
|
138
134
|
# Returns whether a given enumerable is a superset of the set.
|
139
|
-
# - \#proper_superset? (aliased as [>](#method-i-3E))
|
135
|
+
# - \#proper_superset? (aliased as [>](#method-i-3E)):
|
140
136
|
# Returns whether a given enumerable is a proper superset of the set.
|
141
|
-
# - \#disjoint
|
137
|
+
# - \#disjoint?:
|
142
138
|
# Returns +true+ if the set and a given enumerable
|
143
139
|
# have no common elements, +false+ otherwise.
|
144
|
-
# - \#intersect
|
145
|
-
# Returns +true+ if the set and a given enumerable
|
140
|
+
# - \#intersect?:
|
141
|
+
# Returns +true+ if the set and a given enumerable:
|
146
142
|
# have any common elements, +false+ otherwise.
|
147
|
-
# - \#compare_by_identity
|
143
|
+
# - \#compare_by_identity?:
|
148
144
|
# Returns whether the set considers only identity
|
149
145
|
# when comparing elements.
|
150
146
|
#
|
151
147
|
# ### Methods for Assigning
|
152
148
|
#
|
153
|
-
# - \#add (aliased as #<<)
|
149
|
+
# - \#add (aliased as #<<):
|
154
150
|
# Adds a given object to the set; returns +self+.
|
155
|
-
# - \#add
|
151
|
+
# - \#add?:
|
156
152
|
# If the given object is not an element in the set,
|
157
153
|
# adds it and returns +self+; otherwise, returns +nil+.
|
158
|
-
# - \#merge
|
159
|
-
#
|
160
|
-
# - \#replace
|
154
|
+
# - \#merge:
|
155
|
+
# Merges the elements of each given enumerable object to the set; returns +self+.
|
156
|
+
# - \#replace:
|
161
157
|
# Replaces the contents of the set with the contents
|
162
158
|
# of a given enumerable.
|
163
159
|
#
|
164
160
|
# ### Methods for Deleting
|
165
161
|
#
|
166
|
-
# - \#clear
|
162
|
+
# - \#clear:
|
167
163
|
# Removes all elements in the set; returns +self+.
|
168
|
-
# - \#delete
|
164
|
+
# - \#delete:
|
169
165
|
# Removes a given object from the set; returns +self+.
|
170
|
-
# - \#delete
|
166
|
+
# - \#delete?:
|
171
167
|
# If the given object is an element in the set,
|
172
168
|
# removes it and returns +self+; otherwise, returns +nil+.
|
173
|
-
# - \#subtract
|
169
|
+
# - \#subtract:
|
174
170
|
# Removes each given object from the set; returns +self+.
|
175
171
|
# - \#delete_if - Removes elements specified by a given block.
|
176
|
-
# - \#select! (aliased as #filter!)
|
172
|
+
# - \#select! (aliased as #filter!):
|
177
173
|
# Removes elements not specified by a given block.
|
178
|
-
# - \#keep_if
|
174
|
+
# - \#keep_if:
|
179
175
|
# Removes elements not specified by a given block.
|
180
176
|
# - \#reject!
|
181
177
|
# Removes elements specified by a given block.
|
182
178
|
#
|
183
179
|
# ### Methods for Converting
|
184
180
|
#
|
185
|
-
# - \#classify
|
181
|
+
# - \#classify:
|
186
182
|
# Returns a hash that classifies the elements,
|
187
183
|
# as determined by the given block.
|
188
|
-
# - \#collect! (aliased as #map!)
|
184
|
+
# - \#collect! (aliased as #map!):
|
189
185
|
# Replaces each element with a block return-value.
|
190
|
-
# - \#divide
|
186
|
+
# - \#divide:
|
191
187
|
# Returns a hash that classifies the elements,
|
192
188
|
# as determined by the given block;
|
193
189
|
# differs from #classify in that the block may accept
|
194
190
|
# either one or two arguments.
|
195
|
-
# - \#flatten
|
191
|
+
# - \#flatten:
|
196
192
|
# Returns a new set that is a recursive flattening of +self+.
|
197
|
-
# \#flatten
|
193
|
+
# \#flatten!:
|
198
194
|
# Replaces each nested set in +self+ with the elements from that set.
|
199
|
-
# - \#inspect (aliased as #to_s)
|
195
|
+
# - \#inspect (aliased as #to_s):
|
200
196
|
# Returns a string displaying the elements.
|
201
|
-
# - \#join
|
197
|
+
# - \#join:
|
202
198
|
# Returns a string containing all elements, converted to strings
|
203
199
|
# as needed, and joined by the given record separator.
|
204
|
-
# - \#to_a
|
200
|
+
# - \#to_a:
|
205
201
|
# Returns an array containing all set elements.
|
206
|
-
# - \#to_set
|
202
|
+
# - \#to_set:
|
207
203
|
# Returns +self+ if given no arguments and no block;
|
208
204
|
# with a block given, returns a new set consisting of block
|
209
205
|
# return values.
|
210
206
|
#
|
211
207
|
# ### Methods for Iterating
|
212
208
|
#
|
213
|
-
# - \#each
|
209
|
+
# - \#each:
|
214
210
|
# Calls the block with each successive element; returns +self+.
|
215
211
|
#
|
216
212
|
# ### Other Methods
|
217
213
|
#
|
218
|
-
# - \#reset
|
214
|
+
# - \#reset:
|
219
215
|
# Resets the internal state; useful if an object
|
220
216
|
# has been modified while an element in the set.
|
221
217
|
#
|
222
218
|
class Set
|
219
|
+
VERSION = "1.0.4"
|
220
|
+
|
223
221
|
include Enumerable
|
224
222
|
|
225
223
|
# Creates a new set containing the given objects.
|
@@ -507,7 +505,7 @@ class Set
|
|
507
505
|
# the element as parameter. Returns an enumerator if no block is
|
508
506
|
# given.
|
509
507
|
def each(&block)
|
510
|
-
|
508
|
+
block_given? or return enum_for(__method__) { size }
|
511
509
|
@hash.each_key(&block)
|
512
510
|
self
|
513
511
|
end
|
@@ -582,7 +580,7 @@ class Set
|
|
582
580
|
# Equivalent to Set#delete_if, but returns nil if no changes were
|
583
581
|
# made. Returns an enumerator if no block is given.
|
584
582
|
def reject!(&block)
|
585
|
-
|
583
|
+
block_given? or return enum_for(__method__) { size }
|
586
584
|
n = size
|
587
585
|
delete_if(&block)
|
588
586
|
self if size != n
|
@@ -591,7 +589,7 @@ class Set
|
|
591
589
|
# Equivalent to Set#keep_if, but returns nil if no changes were
|
592
590
|
# made. Returns an enumerator if no block is given.
|
593
591
|
def select!(&block)
|
594
|
-
|
592
|
+
block_given? or return enum_for(__method__) { size }
|
595
593
|
n = size
|
596
594
|
keep_if(&block)
|
597
595
|
self if size != n
|
@@ -600,13 +598,15 @@ class Set
|
|
600
598
|
# Equivalent to Set#select!
|
601
599
|
alias filter! select!
|
602
600
|
|
603
|
-
# Merges the elements of the given enumerable
|
601
|
+
# Merges the elements of the given enumerable objects to the set and
|
604
602
|
# returns self.
|
605
|
-
def merge(
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
603
|
+
def merge(*enums, **nil)
|
604
|
+
enums.each do |enum|
|
605
|
+
if enum.instance_of?(self.class)
|
606
|
+
@hash.update(enum.instance_variable_get(:@hash))
|
607
|
+
else
|
608
|
+
do_with_enum(enum) { |o| add(o) }
|
609
|
+
end
|
610
610
|
end
|
611
611
|
|
612
612
|
self
|
@@ -854,7 +854,7 @@ module Enumerable
|
|
854
854
|
# Needs to `require "set"` to use this method.
|
855
855
|
def to_set(klass = Set, *args, &block)
|
856
856
|
klass.new(self, *args, &block)
|
857
|
-
end
|
857
|
+
end unless method_defined?(:to_set)
|
858
858
|
end
|
859
859
|
|
860
860
|
autoload :SortedSet, "#{__dir__}/set/sorted_set"
|
data/set.gemspec
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
+
name = File.basename(__FILE__, ".gemspec")
|
2
|
+
version = ["lib", Array.new(name.count("-")+1, "..").join("/")].find do |dir|
|
3
|
+
break File.foreach(File.join(__dir__, dir, "#{name.tr('-', '/')}.rb")) do |line|
|
4
|
+
/^\s*VERSION\s*=\s*"(.*)"/ =~ line and break $1
|
5
|
+
end rescue nil
|
6
|
+
end
|
7
|
+
|
1
8
|
Gem::Specification.new do |spec|
|
2
|
-
spec.name =
|
3
|
-
spec.version =
|
9
|
+
spec.name = name
|
10
|
+
spec.version = version
|
4
11
|
spec.authors = ["Akinori MUSHA"]
|
5
12
|
spec.email = ["knu@idaemons.org"]
|
6
13
|
|
@@ -8,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
8
15
|
spec.description = %q{Provides a class to deal with collections of unordered, unique values}
|
9
16
|
spec.homepage = "https://github.com/ruby/set"
|
10
17
|
spec.licenses = ["Ruby", "BSD-2-Clause"]
|
11
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
18
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
12
19
|
|
13
20
|
spec.metadata["homepage_uri"] = spec.homepage
|
14
21
|
spec.metadata["source_code_uri"] = spec.homepage
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: set
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akinori MUSHA
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Provides a class to deal with collections of unordered, unique values
|
14
14
|
email:
|
@@ -17,6 +17,8 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
+
- ".github/CODEOWNERS"
|
21
|
+
- ".github/dependabot.yml"
|
20
22
|
- ".github/workflows/test.yml"
|
21
23
|
- ".gitignore"
|
22
24
|
- CHANGELOG.md
|
@@ -36,8 +38,8 @@ licenses:
|
|
36
38
|
metadata:
|
37
39
|
homepage_uri: https://github.com/ruby/set
|
38
40
|
source_code_uri: https://github.com/ruby/set
|
39
|
-
changelog_uri: https://github.com/ruby/set/blob/v1.0.
|
40
|
-
post_install_message:
|
41
|
+
changelog_uri: https://github.com/ruby/set/blob/v1.0.4/CHANGELOG.md
|
42
|
+
post_install_message:
|
41
43
|
rdoc_options: []
|
42
44
|
require_paths:
|
43
45
|
- lib
|
@@ -45,15 +47,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
45
47
|
requirements:
|
46
48
|
- - ">="
|
47
49
|
- !ruby/object:Gem::Version
|
48
|
-
version: 2.
|
50
|
+
version: 2.7.0
|
49
51
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
52
|
requirements:
|
51
53
|
- - ">="
|
52
54
|
- !ruby/object:Gem::Version
|
53
55
|
version: '0'
|
54
56
|
requirements: []
|
55
|
-
rubygems_version: 3.
|
56
|
-
signing_key:
|
57
|
+
rubygems_version: 3.4.10
|
58
|
+
signing_key:
|
57
59
|
specification_version: 4
|
58
60
|
summary: Provides a class to deal with collections of unordered, unique values
|
59
61
|
test_files: []
|