corefines 1.8.0 → 1.11.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
- SHA1:
3
- metadata.gz: d1470ef3188042ed178a8c0204e54046b3ea6a3d
4
- data.tar.gz: 6a5e024a2f6e81e59aade31d49b09e59d3be57df
2
+ SHA256:
3
+ metadata.gz: e1786b22dad695d512f646e225334eeae9ecb2621a067461dc5c01151137ead0
4
+ data.tar.gz: 128135d2233f9b74976347ee1bbb4cae8b91327227aa4ed0e13432011f51d689
5
5
  SHA512:
6
- metadata.gz: 2d5d5921ebd1dcbd39cd5a499ef9f82a4c4847cfdabea32df8c302db256a20cc6c1a45bf62e2923e052136ebb375a7839c598b2094830da22f488e74846edf30
7
- data.tar.gz: 66952a116b6e578b37745a5da4275e1f913c397265ae3f51ea0047bb2ed963fa2b94016cce45c4d976577bfa5b907688799644f25fc39b3a3bad1cb2082d0ed1
6
+ metadata.gz: 5159cba9976f0b56054472b43a3f0c28ce100eda5e6efe79896b97fdba42f078edc91327066b7dd99c3e9698b87c7ae643ad6989057ccf9d1b728f315bfd990d
7
+ data.tar.gz: a0158e47cc535f3e604a992ffac923812b1df13af300a2b91c56e77ab9a1983a374a5f630dfb11f005bbfd29926ca0504a17c976504b7feb0abf206a5b6f7b47
data/CHANGELOG.adoc CHANGED
@@ -3,9 +3,31 @@
3
3
  :doc-base-url: http://www.rubydoc.info/github/jirutka/corefines/Corefines
4
4
  :issue-uri: {repo-uri}/issues
5
5
 
6
+
7
+ == 1.11.1 (2021-07-21)
8
+
9
+ * Fix String#rekey with symbol proc (e.g. `&:to_s`) failing on Ruby 3.0.
10
+
11
+
12
+ == 1.11.0 (2017-09-15)
13
+
14
+ * Add new refinement {doc-base-url}/Hash/Recurse[Hash#recurse].
15
+ * Add new refinement {doc-base-url}/Hash/FlatMap[Hash#flat_map].
16
+
17
+
18
+ == 1.10.0 (2017-07-26)
19
+
20
+ * Replace deprecated `Fixnum` with `Integer`.
21
+
22
+
23
+ == 1.9.0 (2016-02-03)
24
+
25
+ * Add new refinement {doc-base-url}/Enumerable/MapBy[Enumerable#map_by].
26
+
27
+
6
28
  == 1.8.0 (2015-07-06)
7
29
 
8
- * Add new refinement {doc-base-url}/Class/descendants[Class#descendants].
30
+ * Add new refinement {doc-base-url}/Class/Descendants[Class#descendants].
9
31
 
10
32
 
11
33
  == 1.7.0 (2015-07-05)
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright 2015 Jakub Jirutka <jakub@jirutka.cz>.
3
+ Copyright 2015-2017 Jakub Jirutka <jakub@jirutka.cz>.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.adoc CHANGED
@@ -1,13 +1,9 @@
1
1
  = Corefines
2
2
  Jakub Jirutka <https://github.com/jirutka[@jirutka]>
3
- :page-layout: base
4
- :idprefix:
5
- ifdef::env-github[:idprefix: user-content-]
6
- :idseparator: -
7
3
  :source-language: ruby
8
- :language: {source-language}
9
4
  // custom
10
5
  :gem-name: corefines
6
+ :gem-version: 1.11.1
11
7
  :gh-name: jirutka/{gem-name}
12
8
  :gh-branch: master
13
9
  :badge-style: flat
@@ -40,13 +36,13 @@ TODO
40
36
 
41
37
  Add this line to your application’s Gemfile:
42
38
 
43
- [source]
44
- gem 'corefines', '~> 1.8'
39
+ [source, subs="+attributes"]
40
+ gem '{gem-name}', '~> {gem-version}'
45
41
 
46
42
  or to your gemspec:
47
43
 
48
- [source]
49
- s.add_runtime_dependency 'corefines', '~> 1.8'
44
+ [source, subs="+attributes"]
45
+ s.add_runtime_dependency '{gem-name}', '~> {gem-version}'
50
46
 
51
47
  and then execute:
52
48
 
@@ -138,6 +134,7 @@ Not ideal indeed, but probably the best of what we can achieve.
138
134
  * {doc-base-url}/Enumerable[Enumerable]
139
135
  ** {doc-base-url}/Enumerable/IndexBy[#index_by]
140
136
  ** {doc-base-url}/Enumerable/Many[#many?]
137
+ ** {doc-base-url}/Enumerable/MapBy[#map_by]
141
138
  ** {doc-base-url}/Enumerable/MapSend[#map_send]
142
139
  ** {doc-base-url}/Enumerable/MapTo[#map_to]
143
140
  * {doc-base-url}/Hash[Hash]
@@ -146,8 +143,10 @@ Not ideal indeed, but probably the best of what we can achieve.
146
143
  ** {doc-base-url}/Hash/Compact[#compact!]
147
144
  ** {doc-base-url}/Hash/Except[#except]
148
145
  ** {doc-base-url}/Hash/Except[#except!]
146
+ ** {doc-base-url}/Hash/FlatMap[#flat_map]
149
147
  ** {doc-base-url}/Hash/Only[#only]
150
148
  ** {doc-base-url}/Hash/Only[#only!]
149
+ ** {doc-base-url}/Hash/Recurse[#recurse]
151
150
  ** {doc-base-url}/Hash/Rekey[#rekey]
152
151
  ** {doc-base-url}/Hash/Rekey[#rekey!]
153
152
  ** {doc-base-url}/Hash/SymbolizeKeys[#symbolize_keys]
@@ -77,6 +77,45 @@ module Corefines
77
77
  end
78
78
  end
79
79
 
80
+ ##
81
+ # @!method map_by(&block)
82
+ # Converts enumerable into a Hash, iterating over each element where the
83
+ # provided block must return an array of two elements: a key and a value
84
+ # to be added into an array that corresponds to that key.
85
+ #
86
+ # It's similar to {::Enumerable#group_by}, but allows to map the value
87
+ # being added into a group.
88
+ #
89
+ # @example
90
+ # a = [1, 2, 3, 4, 5]
91
+ # a.map_by { |e| [e % 2, e + 1] }
92
+ # #=> { 0 => [3, 5], 1 => [2, 4, 6] }
93
+ #
94
+ # @example
95
+ # h = { "Lucy" => 86, "Ruby" => 98, "Drew" => 94, "Lisa" => 54 }
96
+ # h.map_by { |k, v| [score(v), k] }
97
+ # #=> { "A" => ["Ruby", "Drew"], "B" => ["Lucy"], "F" => ["Lisa"] }
98
+ #
99
+ # @yield [obj] gives each element to the block.
100
+ # @yieldreturn [Array] an array with the key and the value.
101
+ # @return [Hash]
102
+ #
103
+ module MapBy
104
+ Support.classes_including_module(::Enumerable) do |klass|
105
+
106
+ refine klass do
107
+ def map_by
108
+ res = {}
109
+ each do |e|
110
+ k, v = yield(*e)
111
+ (res[k] ||= []) << v
112
+ end
113
+ res
114
+ end
115
+ end
116
+ end
117
+ end
118
+
80
119
  ##
81
120
  # @!method map_send(method_name, *args, &block)
82
121
  # Sends a message to each element and collects the result.
@@ -69,6 +69,43 @@ module Corefines
69
69
  end
70
70
  end
71
71
 
72
+ ##
73
+ # @!method flat_map(&block)
74
+ # Returns a new hash with the merged results of running the _block_ once
75
+ # for every entry in +self+.
76
+ #
77
+ # @example
78
+ # hash = { a: 1, b: 2, c: 3 }
79
+ # hash.flat_map { |k, v| {k => v * 2, k.upcase => v} if v % 2 == 1 }
80
+ # # => { a: 2, A: 1, c: 6, C: 3 }
81
+ # hash.flat_map { |k, v| [[k, v * 2], [k.upcase => v]] if v % 2 == 1 }
82
+ # # => { a: 2, A: 1, c: 6, C: 3 }
83
+ #
84
+ # @yield [key, value] gives every key-value pair to the block.
85
+ # @yieldreturn [#to_h, Array, nil] an object that will be interpreted as
86
+ # a Hash and merged into the result, or nil to omit this key-value.
87
+ # @return [Hash] a new hash.
88
+ module FlatMap
89
+ refine ::Hash do
90
+ def flat_map
91
+ each_with_object({}) do |(key, value), hash|
92
+ yielded = yield(key, value)
93
+
94
+ if yielded.is_a? ::Hash
95
+ hash.merge!(yielded)
96
+ elsif yielded.is_a? ::Array
97
+ # Array#to_h exists since Ruby 2.1.
98
+ yielded.each do |pair|
99
+ hash.store(*pair)
100
+ end
101
+ elsif yielded
102
+ hash.merge!(yielded.to_h)
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+
72
109
  ##
73
110
  # @!method only(*keys)
74
111
  # @example
@@ -132,6 +169,39 @@ module Corefines
132
169
  end
133
170
  end
134
171
 
172
+ ##
173
+ # @!method recurse(&block)
174
+ # Transforms this hash and each of its sub-hashes recursively using the
175
+ # given _block_.
176
+ #
177
+ # It does not mutate the hash if the given _block_ is pure (i.e. does not
178
+ # modify given hashes, but returns new ones).
179
+ #
180
+ # @example
181
+ # hash = {"a" => 1, "b" => {"c" => {"e" => 5}, "d" => 4}}
182
+ #
183
+ # hash.recurse { |h| h.symbolize_keys } # => {a: 1, b: {c: {e: 5}, d: 4}}
184
+ # hash # => {"a" => 1, "b" => {"c" => {"e" => 5}, "d" => 4}}
185
+ #
186
+ # hash.recurse { |h| h.symbolize_keys! } # => {a: 1, b: {c: {e: 5}, d: 4}}
187
+ # hash # => {a: 1, b: {c: {e: 5}, d: 4}}
188
+ #
189
+ # @yield [Hash] gives this hash and every sub-hash (recursively).
190
+ # The return value replaces the old value.
191
+ # @return [Hash] a result of applying _block_ to this hash and each of
192
+ # its sub-hashes (recursively).
193
+ #
194
+ module Recurse
195
+ refine ::Hash do
196
+ def recurse(&block)
197
+ h = yield(self)
198
+ h.each do |key, value|
199
+ h[key] = value.recurse(&block) if value.is_a? ::Hash
200
+ end
201
+ end
202
+ end
203
+ end
204
+
135
205
  ##
136
206
  # @!method rekey(key_map = nil, &block)
137
207
  # Returns a new hash with keys transformed according to the given
@@ -177,20 +247,28 @@ module Corefines
177
247
  refine ::Hash do
178
248
  def rekey(key_map = nil, &block)
179
249
  fail ArgumentError, "provide key_map, or block, not both" if key_map && block
180
- block = ->(k, _) { k.to_sym rescue k } if !key_map && !block
181
250
 
182
251
  # Note: self.dup is used to preserve the default_proc.
183
- if block
184
- # This is needed for "symbol procs" (e.g. &:to_s).
185
- transform_key = block.arity.abs == 1 ? ->(k, _) { block[k] } : block
252
+ if key_map
253
+ key_map.each_with_object(dup) do |(from, to), hash|
254
+ hash[to] = hash.delete(from) if hash.key? from
255
+ end
256
+ else
257
+ transform_key = if !block
258
+ ->(k, _) { k.to_sym rescue k }
259
+ elsif block.arity.abs == 1 || block.lambda? && block.arity != 2
260
+ # This is needed for "symbol procs" (e.g. &:to_s). It behaves
261
+ # differently since Ruby 3.0!
262
+ # Ruby <3.0: block.arity => -1, block.lambda? => false
263
+ # Ruby 3.0: block.arity => -2, block.lambda? => true
264
+ ->(k, _) { block[k] }
265
+ else
266
+ block
267
+ end
186
268
 
187
269
  each_with_object(dup.clear) do |(key, value), hash|
188
270
  hash[ transform_key[key, value] ] = value
189
271
  end
190
- else
191
- key_map.each_with_object(dup) do |(from, to), hash|
192
- hash[to] = hash.delete(from) if hash.key? from
193
- end
194
272
  end
195
273
  end
196
274
 
@@ -75,15 +75,15 @@ module Corefines
75
75
  # "Sugar is sweet".color(text: 7) # => "\e[0;37;49mSugar is sweet\e[0m"
76
76
  #
77
77
  # @overload color(text_color)
78
- # @param text_color [#to_sym, Fixnum] text (foreground) color (see
78
+ # @param text_color [#to_sym, Integer] text (foreground) color (see
79
79
  # {COLOR_CODES}).
80
80
  #
81
81
  # @overload color(opts)
82
- # @option opts [#to_sym, Fixnum] :mode text attributes (see
82
+ # @option opts [#to_sym, Integer] :mode text attributes (see
83
83
  # {MODE_CODES}).
84
- # @option opts [#to_sym, Fixnum] :text,:fg text (foreground) color (see
84
+ # @option opts [#to_sym, Integer] :text,:fg text (foreground) color (see
85
85
  # {COLOR_CODES}).
86
- # @option opts [#to_sym, Fixnum] :background,:bg background color (see
86
+ # @option opts [#to_sym, Integer] :background,:bg background color (see
87
87
  # {COLOR_CODES}).
88
88
  #
89
89
  # @return [String] a copy of this string colored for command line output
@@ -133,12 +133,12 @@ module Corefines
133
133
  private
134
134
 
135
135
  def self.color_code(color, offset)
136
- return color + offset if color.is_a? ::Fixnum
136
+ return color + offset if color.is_a? ::Integer
137
137
  COLOR_CODES[color.to_sym] + offset if color && COLOR_CODES[color.to_sym]
138
138
  end
139
139
 
140
140
  def self.mode_code(mode)
141
- return mode if mode.is_a? ::Fixnum
141
+ return mode if mode.is_a? ::Integer
142
142
  MODE_CODES[mode.to_sym] if mode
143
143
  end
144
144
  end
@@ -248,7 +248,7 @@ module Corefines
248
248
  # "foo\n\nbar".indent(2) # => " foo\n\n bar"
249
249
  # "foo\n\nbar".indent(2, nil, true) # => " foo\n \n bar"
250
250
  #
251
- # @param amount [Fixnum] the indent size.
251
+ # @param amount [Integer] the indent size.
252
252
  # @param indent_str [String, nil] the indent character to use.
253
253
  # The default is +nil+, which tells the method to make a guess by
254
254
  # peeking at the first indented line, and fallback to a space if
@@ -1,3 +1,3 @@
1
1
  module Corefines
2
- VERSION = '1.8.0'
2
+ VERSION = '1.11.1'.freeze
3
3
  end
@@ -0,0 +1,28 @@
1
+ describe Enumerable do
2
+ using Corefines::Enumerable::map_by
3
+
4
+ describe '#map_by' do
5
+
6
+ context Array do
7
+ let(:input) { [1, 2, 3, 4, 5] }
8
+ let(:expected) { { 0 => [3, 5], 1 => [2, 4, 6] } }
9
+
10
+ it "returns hash with the elements grouped and mapped by result of the block" do
11
+ expect(input.map_by { |e| [e % 2, e + 1] }).to eq expected
12
+ end
13
+ end
14
+
15
+ context Hash do
16
+ let(:input) { { "Lucy" => 86, "Ruby" => 98, "Drew" => 94, "Lisa" => 54 } }
17
+ let(:expected) { { "A" => ["Ruby", "Drew"], "B" => ["Lucy"], "F" => ["Lisa"] } }
18
+
19
+ it "returns hash with the elements grouped and mapped by result of the block" do
20
+ expect(input.map_by { |k, v| [score(v), k] }).to eq expected
21
+ end
22
+
23
+ def score(n)
24
+ n < 70 ? 'F' : n < 80 ? 'C' : n < 90 ? 'B' : 'A'
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,61 @@
1
+ require 'ostruct'
2
+
3
+ describe Hash do
4
+ describe '#flat_map' do
5
+ using Corefines::Hash::flat_map
6
+
7
+ let(:hash) { {a: 1, b: 2, c: 3} }
8
+ let!(:original) { hash.dup }
9
+
10
+ context "with block" do
11
+ it "returns a new hash, does not mutate self" do
12
+ expect( hash.flat_map { |k, v| {k => v * 2} } ).to be_a Hash
13
+ expect( hash ).to eq original
14
+ end
15
+
16
+ context "that yields Hash" do
17
+ it "returns merged results of running block for each entry" do
18
+ expect( hash.flat_map { |k, v| {k => v * 2, k.upcase => v * 3} } )
19
+ .to eq({a: 2, A: 3, b: 4, B: 6, c: 6, C: 9})
20
+ end
21
+
22
+ it "does not flatten yielded hashes" do
23
+ expect( hash.flat_map { |k, v| {k => {k.upcase => v}} } )
24
+ .to eq({a: {A: 1}, b: {B: 2}, c: {C: 3}})
25
+ end
26
+
27
+ it "omits entries for which the block yielded nil" do
28
+ expect( hash.flat_map { |k, v| {k.upcase => v * 2} if k != :b } )
29
+ .to eq({A: 2, C: 6})
30
+ end
31
+
32
+ it "handles duplicated keys by method the last wins" do
33
+ expect( hash.flat_map { |k, v| {k => v * 2, b: v * 6} } )
34
+ .to eq({a: 2, b: 18, c: 6})
35
+ end
36
+ end
37
+
38
+ context "that yields Array" do
39
+ it "interprets array of pairs as Hash" do
40
+ expect( hash.flat_map { |k, v| [[k, v * 2], [k.upcase, v * 3]] } )
41
+ .to eq({a: 2, A: 3, b: 4, B: 6, c: 6, C: 9})
42
+ end
43
+
44
+ it "raises ArgumentError if nested array has more than 2 elements" do
45
+ expect { hash.flat_map { |k, v| [[k, v, v]] } }.to raise_error(ArgumentError)
46
+ end
47
+ end
48
+
49
+ # There's no usable class in 1.9.3 implementing #to_h and I'd like to
50
+ # keep this simple...
51
+ if RUBY_VERSION.to_f >= 2
52
+ context "that yields object responding to #to_h" do
53
+ it "calls #to_h on yielded value" do
54
+ expect( hash.flat_map { |k, v| OpenStruct.new(k => v * 2) } )
55
+ .to eq({a: 2, b: 4, c: 6})
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,36 @@
1
+ describe Hash do
2
+ describe '#recurse' do
3
+ using Corefines::Hash::recurse
4
+
5
+ subject(:hash) { {a: 1, b: {d: {f: 6}, e: 5}, c: 3} }
6
+ let(:expected) { {a: 1, b: {d: {f: 6, x: 42}, e: 5, x: 42}, c: 3, x: 42} }
7
+ let!(:original) { Marshal.load(Marshal.dump(hash)) } # deep clone
8
+
9
+ shared_examples :common do
10
+ it "returns a result of calling block on the hash and sub-hashes recursively" do
11
+ is_expected.to eq expected
12
+ end
13
+ end
14
+
15
+ context "with pure block" do
16
+ subject!(:result) { hash.recurse { |h| h.merge(x: 42) } }
17
+
18
+ include_examples :common
19
+
20
+ it "does not mutate the original hash" do
21
+ expect( hash ).to eq original
22
+ end
23
+ end
24
+
25
+ context "with impure block" do
26
+ subject!(:result) { hash.recurse { |h| h.merge!(x: 42) } }
27
+
28
+ include_examples :common
29
+
30
+ it "modifies the hash in-place" do
31
+ expect( hash ).to eq expected
32
+ expect( hash ).to_not eq original
33
+ end
34
+ end
35
+ end
36
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,3 @@
1
- require 'simplecov' unless RUBY_ENGINE == 'jruby'
2
- require 'corefines'
3
-
4
1
  RSpec.configure do |config|
5
2
 
6
3
  # rspec-expectations config
@@ -28,3 +25,13 @@ RSpec.configure do |config|
28
25
 
29
26
  config.color = true
30
27
  end
28
+
29
+ unless RUBY_ENGINE == 'jruby'
30
+ require 'simplecov'
31
+
32
+ SimpleCov.start do
33
+ add_filter '/spec/'
34
+ end
35
+ end
36
+
37
+ require 'corefines'
@@ -21,7 +21,7 @@ describe String do
21
21
  end
22
22
  end
23
23
 
24
- context Fixnum do
24
+ context Integer do
25
25
  it "returns text with the specified foreground color" do
26
26
  expect(text.color(7)).to eq "\e[0;37;49m#{text}\e[0m"
27
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: corefines
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Jirutka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-06 00:00:00.000000000 Z
11
+ date: 2021-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.4'
33
+ version: '1.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.4'
40
+ version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '12.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '12.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.8'
89
+ version: '0.9'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.8'
96
+ version: '0.9'
97
97
  description: |
98
98
  Corefines is a collection of general purpose refinements for extending the core
99
99
  capabilities of Ruby's built-in classes. It also provides a compatibility mode
@@ -127,12 +127,15 @@ files:
127
127
  - spec/class/descendants_spec.rb
128
128
  - spec/enumerable/index_by_spec.rb
129
129
  - spec/enumerable/many_spec.rb
130
+ - spec/enumerable/map_by_spec.rb
130
131
  - spec/enumerable/map_send_spec.rb
131
132
  - spec/enumerable/map_to_spec.rb
132
133
  - spec/hash/compact_spec.rb
133
134
  - spec/hash/except_spec.rb
135
+ - spec/hash/flat_map_spec.rb
134
136
  - spec/hash/only_spec.rb
135
137
  - spec/hash/op_add_spec.rb
138
+ - spec/hash/recurse_spec.rb
136
139
  - spec/hash/rekey_spec.rb
137
140
  - spec/hash/symbolize_keys_spec.rb
138
141
  - spec/module/alias_class_method_spec.rb
@@ -182,9 +185,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
185
  version: '0'
183
186
  requirements: []
184
187
  rubyforge_project:
185
- rubygems_version: 2.4.5
188
+ rubygems_version: 2.7.3
186
189
  signing_key:
187
190
  specification_version: 4
188
191
  summary: A collection of refinements for Ruby core classes.
189
192
  test_files: []
190
- has_rdoc: yard