set 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -1
  3. data/README.md +33 -4
  4. data/lib/set.rb +64 -66
  5. data/set.gemspec +1 -1
  6. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9efb249e9dc58441358a2013c39ac9f9becd2de6728f107c1b5554935ffe0467
4
- data.tar.gz: 8fe8e6f7a664ba006025b4b67ec80335093ef215e348481a44e12ee23b9e42d2
3
+ metadata.gz: 710e7b1fc1bf38f1d6f54154861953313835891a7b8f30ee52e7663c914f34c7
4
+ data.tar.gz: 7f3ecde9cc9456dea795c5977821a8634fcc5e58ddc59ab074675305c8b81abc
5
5
  SHA512:
6
- metadata.gz: 76706c0faab6d07b44c213919862f779bf686eb70bd084cb7cbe0b7543de6aacd3c9146174ed4fa7954435c2739008267660c92fa8598890df64b0b9bb5d72e2
7
- data.tar.gz: a86535d57dba0161abbbc04607ed41f6964fb101d0b236977508b0e7962796ac326911cae978f5035c9669bf2ec9564a5d4d52cad817fbd65276892485eecbda
6
+ metadata.gz: 9ae9bb8e072bd98d7aa2e3fd9baae6f57e49c63e3ccf68705b13a33554c5ac2a5c9544f926f1598c4219f677727b95dd1598f803a4e8f67402c28fa14340cb90
7
+ data.tar.gz: 250dafb092c99682f9b5437bbbf2abeeaf6a9e91f3ce6a789f21d92d2f03bd2fa40e47dfe7761ab9dc779cee84b2357c08b8f309ec203e9340c842bee4f9facc
@@ -1,6 +1,11 @@
1
1
  # Set Changelog
2
2
 
3
- ## 1.0.0 (2020-12-21)
3
+ # 1.0.1 (2020-12-22)
4
+
5
+ * Enhancements
6
+ * Eliminate warnings
7
+
8
+ # 1.0.0 (2020-12-21)
4
9
 
5
10
  This is the first release of set as a gem. Here lists the changes since the version bundled with Ruby 2.7.
6
11
 
data/README.md CHANGED
@@ -1,8 +1,39 @@
1
1
  # Set
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/set`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ This library provides the Set class, which deals with a collection of
4
+ unordered values with no duplicates. It is a hybrid of Array's
5
+ intuitive inter-operation facilities and Hash's fast lookup.
4
6
 
5
- TODO: Delete this and the text above, and describe your gem
7
+ The method `to_set` is added to Enumerable for convenience.
8
+
9
+ Set implements a collection of unordered values with no duplicates.
10
+ This is a hybrid of Array's intuitive inter-operation facilities and
11
+ Hash's fast lookup.
12
+
13
+ Set is easy to use with Enumerable objects (implementing `each`).
14
+ Most of the initializer methods and binary operators accept generic
15
+ Enumerable objects besides sets and arrays. An Enumerable object can
16
+ be converted to Set using the `to_set` method.
17
+
18
+ Set uses Hash as storage, so you must note the following points:
19
+
20
+ * Equality of elements is determined according to Object#eql? and
21
+ Object#hash. Use Set#compare_by_identity to make a set compare its
22
+ elements by their identity.
23
+
24
+ * Set assumes that the identity of each element does not change while
25
+ it is stored. Modifying an element of a set will render the set to
26
+ an unreliable state.
27
+
28
+ * When a string is to be stored, a frozen copy of the string is stored
29
+ instead unless the original string is already frozen.
30
+
31
+ ### Comparison
32
+
33
+ The comparison operators `<`, `>`, `<=`, and `>=` are implemented as
34
+ shorthand for the {proper_,}{subset?,superset?} methods. The `<=>`
35
+ operator reflects this order, or return `nil` for sets that both have
36
+ distinct elements (`{x, y}` vs. `{x, z}` for example).
6
37
 
7
38
  ## Installation
8
39
 
@@ -37,8 +68,6 @@ s2.subset?(s1) #=> true
37
68
 
38
69
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
39
70
 
40
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
41
-
42
71
  ## Contributing
43
72
 
44
73
  Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/set.
data/lib/set.rb CHANGED
@@ -1,35 +1,31 @@
1
- #--
2
1
  # frozen_string_literal: true
2
+ # :markup: markdown
3
3
  #
4
4
  # set.rb - defines the Set class
5
- #++
6
- # Copyright (c) 2002-2016 Akinori MUSHA <knu@iDaemons.org>
5
+ #
6
+ # Copyright (c) 2002-2020 Akinori MUSHA <knu@iDaemons.org>
7
7
  #
8
8
  # Documentation by Akinori MUSHA and Gavin Sinclair.
9
9
  #
10
10
  # All rights reserved. You can redistribute and/or modify it under the same
11
11
  # terms as Ruby.
12
- #
13
- # $Id$
14
- #
15
- # == Overview
16
- #
12
+
13
+
14
+ ##
17
15
  # This library provides the Set class, which deals with a collection
18
16
  # of unordered values with no duplicates. It is a hybrid of Array's
19
17
  # intuitive inter-operation facilities and Hash's fast lookup.
20
18
  #
21
- # The method +to_set+ is added to Enumerable for convenience.
22
-
23
-
19
+ # The method `to_set` is added to Enumerable for convenience.
24
20
  #
25
21
  # Set implements a collection of unordered values with no duplicates.
26
22
  # This is a hybrid of Array's intuitive inter-operation facilities and
27
23
  # Hash's fast lookup.
28
24
  #
29
- # Set is easy to use with Enumerable objects (implementing +each+).
25
+ # Set is easy to use with Enumerable objects (implementing `each`).
30
26
  # Most of the initializer methods and binary operators accept generic
31
27
  # Enumerable objects besides sets and arrays. An Enumerable object
32
- # can be converted to Set using the +to_set+ method.
28
+ # can be converted to Set using the `to_set` method.
33
29
  #
34
30
  # Set uses Hash as storage, so you must note the following points:
35
31
  #
@@ -42,27 +38,29 @@
42
38
  # * When a string is to be stored, a frozen copy of the string is
43
39
  # stored instead unless the original string is already frozen.
44
40
  #
45
- # == Comparison
41
+ # ## Comparison
46
42
  #
47
- # The comparison operators <, >, <=, and >= are implemented as
48
- # shorthand for the {proper_,}{subset?,superset?} methods.
49
- # The <=> operator reflects this order, or return `nil` for
50
- # sets that both have distinct elements ({x, y} vs. {x, z} for example).
43
+ # The comparison operators `<`, `>`, `<=`, and `>=` are implemented as
44
+ # shorthand for the {proper_,}{subset?,superset?} methods. The `<=>`
45
+ # operator reflects this order, or return `nil` for sets that both
46
+ # have distinct elements (`{x, y}` vs. `{x, z}` for example).
51
47
  #
52
- # == Example
48
+ # ## Example
53
49
  #
54
- # require 'set'
55
- # s1 = Set[1, 2] #=> #<Set: {1, 2}>
56
- # s2 = [1, 2].to_set #=> #<Set: {1, 2}>
57
- # s1 == s2 #=> true
58
- # s1.add("foo") #=> #<Set: {1, 2, "foo"}>
59
- # s1.merge([2, 6]) #=> #<Set: {1, 2, "foo", 6}>
60
- # s1.subset?(s2) #=> false
61
- # s2.subset?(s1) #=> true
50
+ # ```ruby
51
+ # require 'set'
52
+ # s1 = Set[1, 2] #=> #<Set: {1, 2}>
53
+ # s2 = [1, 2].to_set #=> #<Set: {1, 2}>
54
+ # s1 == s2 #=> true
55
+ # s1.add("foo") #=> #<Set: {1, 2, "foo"}>
56
+ # s1.merge([2, 6]) #=> #<Set: {1, 2, "foo", 6}>
57
+ # s1.subset?(s2) #=> false
58
+ # s2.subset?(s1) #=> true
59
+ # ```
62
60
  #
63
- # == Contact
61
+ # ## Contact
64
62
  #
65
- # - Akinori MUSHA <knu@iDaemons.org> (current maintainer)
63
+ # - Akinori MUSHA <<knu@iDaemons.org>> (current maintainer)
66
64
  #
67
65
  class Set
68
66
  include Enumerable
@@ -199,9 +197,9 @@ class Set
199
197
  end
200
198
 
201
199
  # Returns self if no arguments are given. Otherwise, converts the
202
- # set to another with klass.new(self, *args, &block).
200
+ # set to another with `klass.new(self, *args, &block)`.
203
201
  #
204
- # In subclasses, returns klass.new(self, *args, &block) unless
202
+ # In subclasses, returns `klass.new(self, *args, &block)` unless
205
203
  # overridden.
206
204
  def to_set(klass = Set, *args, &block)
207
205
  return self if instance_of?(Set) && klass == Set && block.nil? && args.empty?
@@ -318,8 +316,8 @@ class Set
318
316
  # Returns true if the set and the given set have at least one
319
317
  # element in common.
320
318
  #
321
- # Set[1, 2, 3].intersect? Set[4, 5] #=> false
322
- # Set[1, 2, 3].intersect? Set[3, 4] #=> true
319
+ # Set[1, 2, 3].intersect? Set[4, 5] #=> false
320
+ # Set[1, 2, 3].intersect? Set[3, 4] #=> true
323
321
  def intersect?(set)
324
322
  set.is_a?(Set) or raise ArgumentError, "value must be a set"
325
323
  if size < set.size
@@ -330,10 +328,10 @@ class Set
330
328
  end
331
329
 
332
330
  # Returns true if the set and the given set have no element in
333
- # common. This method is the opposite of +intersect?+.
331
+ # common. This method is the opposite of `intersect?`.
334
332
  #
335
- # Set[1, 2, 3].disjoint? Set[3, 4] #=> false
336
- # Set[1, 2, 3].disjoint? Set[4, 5] #=> true
333
+ # Set[1, 2, 3].disjoint? Set[3, 4] #=> false
334
+ # Set[1, 2, 3].disjoint? Set[4, 5] #=> true
337
335
  def disjoint?(set)
338
336
  !intersect?(set)
339
337
  end
@@ -347,7 +345,7 @@ class Set
347
345
  self
348
346
  end
349
347
 
350
- # Adds the given object to the set and returns self. Use +merge+ to
348
+ # Adds the given object to the set and returns self. Use `merge` to
351
349
  # add many elements at once.
352
350
  #
353
351
  # Set[1, 2].add(3) #=> #<Set: {1, 2, 3}>
@@ -369,8 +367,8 @@ class Set
369
367
  add(o) unless include?(o)
370
368
  end
371
369
 
372
- # Deletes the given object from the set and returns self. Use +subtract+ to
373
- # delete many items at once.
370
+ # Deletes the given object from the set and returns self. Use
371
+ # `subtract` to delete many items at once.
374
372
  def delete(o)
375
373
  @hash.delete(o)
376
374
  self
@@ -404,7 +402,7 @@ class Set
404
402
  self
405
403
  end
406
404
 
407
- # Replaces the elements with ones returned by collect().
405
+ # Replaces the elements with ones returned by `collect()`.
408
406
  # Returns an enumerator if no block is given.
409
407
  def collect!
410
408
  block_given? or return enum_for(__method__) { size }
@@ -496,8 +494,8 @@ class Set
496
494
  alias intersection &
497
495
 
498
496
  # Returns a new set containing elements exclusive between the set
499
- # and the given enumerable object. (set ^ enum) is equivalent to
500
- # ((set | enum) - (set & enum)).
497
+ # and the given enumerable object. `(set ^ enum)` is equivalent to
498
+ # `((set | enum) - (set & enum))`.
501
499
  #
502
500
  # Set[1, 2] ^ Set[2, 3] #=> #<Set: {3, 1}>
503
501
  # Set[1, 'b', 'c'] ^ ['b', 'd'] #=> #<Set: {"d", 1, "c"}>
@@ -553,20 +551,20 @@ class Set
553
551
  #
554
552
  # Used in case statements:
555
553
  #
556
- # require 'set'
554
+ # require 'set'
557
555
  #
558
- # case :apple
559
- # when Set[:potato, :carrot]
560
- # "vegetable"
561
- # when Set[:apple, :banana]
562
- # "fruit"
563
- # end
564
- # # => "fruit"
556
+ # case :apple
557
+ # when Set[:potato, :carrot]
558
+ # "vegetable"
559
+ # when Set[:apple, :banana]
560
+ # "fruit"
561
+ # end
562
+ # # => "fruit"
565
563
  #
566
564
  # Or by itself:
567
565
  #
568
- # Set[1, 2, 3] === 2 #=> true
569
- # Set[1, 2, 3] === 4 #=> false
566
+ # Set[1, 2, 3] === 2 #=> true
567
+ # Set[1, 2, 3] === 4 #=> false
570
568
  #
571
569
  alias === include?
572
570
 
@@ -575,12 +573,12 @@ class Set
575
573
  # called once for each element of the set, passing the element as
576
574
  # parameter.
577
575
  #
578
- # require 'set'
579
- # files = Set.new(Dir.glob("*.rb"))
580
- # hash = files.classify { |f| File.mtime(f).year }
581
- # hash #=> {2000=>#<Set: {"a.rb", "b.rb"}>,
582
- # # 2001=>#<Set: {"c.rb", "d.rb", "e.rb"}>,
583
- # # 2002=>#<Set: {"f.rb"}>}
576
+ # require 'set'
577
+ # files = Set.new(Dir.glob("*.rb"))
578
+ # hash = files.classify { |f| File.mtime(f).year }
579
+ # hash #=> {2000=>#<Set: {"a.rb", "b.rb"}>,
580
+ # # 2001=>#<Set: {"c.rb", "d.rb", "e.rb"}>,
581
+ # # 2002=>#<Set: {"f.rb"}>}
584
582
  #
585
583
  # Returns an enumerator if no block is given.
586
584
  def classify # :yields: o
@@ -602,13 +600,13 @@ class Set
602
600
  # if block.call(o1, o2) is true. Otherwise, elements o1 and o2 are
603
601
  # in common if block.call(o1) == block.call(o2).
604
602
  #
605
- # require 'set'
606
- # numbers = Set[1, 3, 4, 6, 9, 10, 11]
607
- # set = numbers.divide { |i,j| (i - j).abs == 1 }
608
- # set #=> #<Set: {#<Set: {1}>,
609
- # # #<Set: {11, 9, 10}>,
610
- # # #<Set: {3, 4}>,
611
- # # #<Set: {6}>}>
603
+ # require 'set'
604
+ # numbers = Set[1, 3, 4, 6, 9, 10, 11]
605
+ # set = numbers.divide { |i,j| (i - j).abs == 1 }
606
+ # set #=> #<Set: {#<Set: {1}>,
607
+ # # #<Set: {11, 9, 10}>,
608
+ # # #<Set: {3, 4}>,
609
+ # # #<Set: {6}>}>
612
610
  #
613
611
  # Returns an enumerator if no block is given.
614
612
  def divide(&func)
@@ -685,7 +683,7 @@ end
685
683
 
686
684
  module Enumerable
687
685
  # Makes a set from the enumerable object with given arguments.
688
- # Needs to +require "set"+ to use this method.
686
+ # Needs to `require "set"` to use this method.
689
687
  def to_set(klass = Set, *args, &block)
690
688
  klass.new(self, *args, &block)
691
689
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "set"
3
- spec.version = "1.0.0"
3
+ spec.version = "1.0.1"
4
4
  spec.authors = ["Akinori MUSHA"]
5
5
  spec.email = ["knu@idaemons.org"]
6
6
 
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.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akinori MUSHA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-21 00:00:00.000000000 Z
11
+ date: 2020-12-22 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:
@@ -35,7 +35,7 @@ licenses:
35
35
  metadata:
36
36
  homepage_uri: https://github.com/ruby/set
37
37
  source_code_uri: https://github.com/ruby/set
38
- changelog_uri: https://github.com/ruby/set/blob/v1.0.0/CHANGELOG.md
38
+ changelog_uri: https://github.com/ruby/set/blob/v1.0.1/CHANGELOG.md
39
39
  post_install_message:
40
40
  rdoc_options: []
41
41
  require_paths: