set 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e23398781865843cd7ba5286dca1a65ff241807ba8196020407b986bc74270b1
4
- data.tar.gz: 19c57ed5aa898b0e4ee695df08aeccfb0d313cd785d4dd318941d5bb68291595
3
+ metadata.gz: a0553df841f04a61495ba77ce0545d0cf8fe2317a8d4113235bc0ffed4a798f9
4
+ data.tar.gz: a0f42b54d9f2d61932e9b781a8adc33e7fa28eef1e0fe646d51e4cb8a10aac9f
5
5
  SHA512:
6
- metadata.gz: 88ee0f430a9b381d557f4c8bbe161c2199207ffcbaeb79d78daec9b9dc3e4ebb9fbc3a397ae82c5ffeba0b73782e9363ee19512e0b1b0372628ef4c6d715365a
7
- data.tar.gz: d05a97bb9a5cb900eb303ce85926b73e04530fd44ca0cc85e9ca09e8413af5f5a3ad812cf4409a9fd5f2bc191632e8673d9fc3c89ebb62b8fa13fcf6a3c643ff
6
+ metadata.gz: 96305ae873bfaf18381f91252201245ef4322ada12644358f0d8d310c54722dac39d6c79b26a270322931d9d4848955542acc3912ec57c75b57bca38994806c3
7
+ data.tar.gz: 77adbb45986b8203e9e11da2e0eea741b36903a2017c4d5d1898b9700b82ec19e1bbff27883e3c485e991cdc67b3f0bde9582605c0a84ed1fc9322409ddad284
@@ -0,0 +1 @@
1
+ * @knu
@@ -7,11 +7,11 @@ jobs:
7
7
  name: build (${{ matrix.ruby }} / ${{ matrix.os }})
8
8
  strategy:
9
9
  matrix:
10
- ruby: [ 2.7, 2.6, 2.5, head ]
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@v3
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-2020 Akinori MUSHA <knu@iDaemons.org>
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 deals with a collection
16
- # of unordered values with no duplicates. It is a hybrid of Array's
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
@@ -156,7 +152,7 @@
156
152
  # If the given object is not an element in the set,
157
153
  # adds it and returns +self+; otherwise, returns +nil+.
158
154
  # - \#merge:
159
- # Adds each given object to the set; returns +self+.
155
+ # Merges the elements of each given enumerable object to the set; returns +self+.
160
156
  # - \#replace:
161
157
  # Replaces the contents of the set with the contents
162
158
  # of a given enumerable.
@@ -220,6 +216,8 @@
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
- block or return enum_for(__method__) { size }
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
- block or return enum_for(__method__) { size }
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
- block or return enum_for(__method__) { size }
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 object to the set and
601
+ # Merges the elements of the given enumerable objects to the set and
604
602
  # returns self.
605
- def merge(enum)
606
- if enum.instance_of?(self.class)
607
- @hash.update(enum.instance_variable_get(:@hash))
608
- else
609
- do_with_enum(enum) { |o| add(o) }
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
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 = "set"
3
- spec.version = "1.0.3"
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.3.0")
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.3
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: 2022-09-06 00:00:00.000000000 Z
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,7 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
+ - ".github/CODEOWNERS"
20
21
  - ".github/dependabot.yml"
21
22
  - ".github/workflows/test.yml"
22
23
  - ".gitignore"
@@ -37,8 +38,8 @@ licenses:
37
38
  metadata:
38
39
  homepage_uri: https://github.com/ruby/set
39
40
  source_code_uri: https://github.com/ruby/set
40
- changelog_uri: https://github.com/ruby/set/blob/v1.0.3/CHANGELOG.md
41
- post_install_message:
41
+ changelog_uri: https://github.com/ruby/set/blob/v1.0.4/CHANGELOG.md
42
+ post_install_message:
42
43
  rdoc_options: []
43
44
  require_paths:
44
45
  - lib
@@ -46,15 +47,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
46
47
  requirements:
47
48
  - - ">="
48
49
  - !ruby/object:Gem::Version
49
- version: 2.3.0
50
+ version: 2.7.0
50
51
  required_rubygems_version: !ruby/object:Gem::Requirement
51
52
  requirements:
52
53
  - - ">="
53
54
  - !ruby/object:Gem::Version
54
55
  version: '0'
55
56
  requirements: []
56
- rubygems_version: 3.4.0.dev
57
- signing_key:
57
+ rubygems_version: 3.4.10
58
+ signing_key:
58
59
  specification_version: 4
59
60
  summary: Provides a class to deal with collections of unordered, unique values
60
61
  test_files: []