set 1.1.0 → 1.1.1

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: cef560e603f6d6413751c31bb94fddf3838a66af8e71cff73c74760ff479ff6a
4
- data.tar.gz: 448e22e93eebe57b26200fc1c8be476d60494193136aabb09a50c68e878e96cf
3
+ metadata.gz: c589eb5330bd847b4d8c3dc01648971ccfba64b7c7e44bdf6fd8e982c7f8f1b2
4
+ data.tar.gz: 2c592861e01df2d0e3eab083c808694e01f9edaa649c593dcde4db29acbbc28b
5
5
  SHA512:
6
- metadata.gz: 91fa3052d7f25eaf6c0066013a5bd2d0c58961fe330c8923853634bac908ae83323d01b26ec8f85c4ab1ae309a83cc8e30e0918802ebb6f96fc3fcb7b7bdd433
7
- data.tar.gz: 07b57081279057d476e1fe7c07587db1de0243cb78d36bc04b5b3ed303643b54320f08e98ed3672e610df84c42f0d503c7fae7eba040d2cf260c84319e7f9745
6
+ metadata.gz: 9d9472b2ab8509ec1772d0c935ae0fc8bfa0df5a6ffd263cefc65b39e24a430aab43863d55393b95df61d83a6dea9943f2a50d1dfa6bafc7b0b672d66f3c4a4b
7
+ data.tar.gz: 11b76695b6ac8d0a362c350c7a6575c04ff72159fa9fcb6a4277fc5a9a7437a986cc4f9dcb0c728f500c6e68e6e5e09ed016cd9dbf0ab629d6e10bcddc4b8b37
@@ -3,11 +3,18 @@ name: test
3
3
  on: [push, pull_request]
4
4
 
5
5
  jobs:
6
+ ruby-versions:
7
+ uses: ruby/actions/.github/workflows/ruby_versions.yml@master
8
+ with:
9
+ engine: cruby
10
+ min_version: 3.0
11
+
6
12
  build:
13
+ needs: ruby-versions
7
14
  name: build (${{ matrix.ruby }} / ${{ matrix.os }})
8
15
  strategy:
9
16
  matrix:
10
- ruby: [ 3.2, 3.1, "3.0", head ]
17
+ ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
11
18
  os: [ ubuntu-latest, macos-latest ]
12
19
  runs-on: ${{ matrix.os }}
13
20
  steps:
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Set Changelog
2
2
 
3
+ # 1.1.1 (2024-11-29)
4
+
5
+ * Enhancements
6
+ * Fix Set#^ to respect subclasses [#38][] ([@kyanagi][])
7
+ * Speed up Set#flatten [#39][] ([@kyanagi][])
8
+
3
9
  # 1.1.0 (2023-12-23)
4
10
 
5
11
  * Optimize for and require Ruby >=3
@@ -48,6 +54,8 @@ This is the first release of set as a gem. Here lists the changes since the ver
48
54
  [#20]: https://github.com/ruby/set/pull/20
49
55
  [#29]: https://github.com/ruby/set/pull/29
50
56
  [#30]: https://github.com/ruby/set/pull/30
57
+ [#38]: https://github.com/ruby/set/pull/38
58
+ [#39]: https://github.com/ruby/set/pull/39
51
59
  [Feature #17838]: https://bugs.ruby-lang.org/issues/17838
52
60
  [Feature #16989]: https://bugs.ruby-lang.org/issues/16989
53
61
 
@@ -56,4 +64,5 @@ This is the first release of set as a gem. Here lists the changes since the ver
56
64
  [@jeremyevans]: https://github.com/jeremyevans
57
65
  [@k-tsj]: https://github.com/k-tsj
58
66
  [@knu]: https://github.com/knu
67
+ [@kyanagi]: https://github.com/kyanagi
59
68
  [@marcandre]: https://github.com/marcandre
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2002-2020 Akinori MUSHA
1
+ Copyright (c) 2002-2024 Akinori MUSHA
2
2
 
3
3
  All rights reserved.
4
4
 
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-2023 Akinori MUSHA <knu@iDaemons.org>
6
+ # Copyright (c) 2002-2024 Akinori MUSHA <knu@iDaemons.org>
7
7
  #
8
8
  # Documentation by Akinori MUSHA and Gavin Sinclair.
9
9
  #
@@ -216,7 +216,7 @@
216
216
  # has been modified while an element in the set.
217
217
  #
218
218
  class Set
219
- VERSION = "1.1.0"
219
+ VERSION = "1.1.1"
220
220
 
221
221
  include Enumerable
222
222
 
@@ -335,7 +335,7 @@ class Set
335
335
  end
336
336
  end
337
337
 
338
- # Converts the set to an array. The order of elements is uncertain.
338
+ # Returns an array containing all elements in the set.
339
339
  #
340
340
  # Set[1, 2].to_a #=> [1, 2]
341
341
  # Set[1, 'c', :s].to_a #=> [1, "c", :s]
@@ -353,16 +353,19 @@ class Set
353
353
  klass.new(self, *args, &block)
354
354
  end
355
355
 
356
- def flatten_merge(set, seen = Set.new) # :nodoc:
356
+ def flatten_merge(set, seen = {}) # :nodoc:
357
357
  set.each { |e|
358
358
  if e.is_a?(Set)
359
- if seen.include?(e_id = e.object_id)
359
+ case seen[e_id = e.object_id]
360
+ when true
360
361
  raise ArgumentError, "tried to flatten recursive Set"
362
+ when false
363
+ next
361
364
  end
362
365
 
363
- seen.add(e_id)
366
+ seen[e_id] = true
364
367
  flatten_merge(e, seen)
365
- seen.delete(e_id)
368
+ seen[e_id] = false
366
369
  else
367
370
  add(e)
368
371
  end
@@ -540,22 +543,22 @@ class Set
540
543
  # Deletes every element of the set for which block evaluates to
541
544
  # true, and returns self. Returns an enumerator if no block is
542
545
  # given.
543
- def delete_if
546
+ def delete_if(&block)
544
547
  block_given? or return enum_for(__method__) { size }
545
- # @hash.delete_if should be faster, but using it breaks the order
546
- # of enumeration in subclasses.
547
- select { |o| yield o }.each { |o| @hash.delete(o) }
548
+ # Instead of directly using @hash.delete_if, perform enumeration
549
+ # using self.each that subclasses may override.
550
+ select(&block).each { |o| @hash.delete(o) }
548
551
  self
549
552
  end
550
553
 
551
554
  # Deletes every element of the set for which block evaluates to
552
555
  # false, and returns self. Returns an enumerator if no block is
553
556
  # given.
554
- def keep_if
557
+ def keep_if(&block)
555
558
  block_given? or return enum_for(__method__) { size }
556
- # @hash.keep_if should be faster, but using it breaks the order of
557
- # enumeration in subclasses.
558
- reject { |o| yield o }.each { |o| @hash.delete(o) }
559
+ # Instead of directly using @hash.keep_if, perform enumeration
560
+ # using self.each that subclasses may override.
561
+ reject(&block).each { |o| @hash.delete(o) }
559
562
  self
560
563
  end
561
564
 
@@ -659,7 +662,7 @@ class Set
659
662
  # Set[1, 2] ^ Set[2, 3] #=> #<Set: {3, 1}>
660
663
  # Set[1, 'b', 'c'] ^ ['b', 'd'] #=> #<Set: {"d", 1, "c"}>
661
664
  def ^(enum)
662
- n = Set.new(enum)
665
+ n = self.class.new(enum)
663
666
  each { |o| n.add(o) unless n.delete?(o) }
664
667
  n
665
668
  end
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.1.0
4
+ version: 1.1.1
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: 2023-12-23 00:00:00.000000000 Z
11
+ date: 2024-11-29 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:
@@ -38,8 +38,8 @@ licenses:
38
38
  metadata:
39
39
  homepage_uri: https://github.com/ruby/set
40
40
  source_code_uri: https://github.com/ruby/set
41
- changelog_uri: https://github.com/ruby/set/blob/v1.1.0/CHANGELOG.md
42
- post_install_message:
41
+ changelog_uri: https://github.com/ruby/set/blob/v1.1.1/CHANGELOG.md
42
+ post_install_message:
43
43
  rdoc_options: []
44
44
  require_paths:
45
45
  - lib
@@ -54,8 +54,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  requirements: []
57
- rubygems_version: 3.4.10
58
- signing_key:
57
+ rubygems_version: 3.5.23
58
+ signing_key:
59
59
  specification_version: 4
60
60
  summary: Provides a class to deal with collections of unordered, unique values
61
61
  test_files: []