refinements 7.3.0 → 7.8.0
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
- checksums.yaml.gz.sig +3 -2
- data.tar.gz.sig +0 -0
- data/README.adoc +103 -10
- data/lib/refinements.rb +1 -0
- data/lib/refinements/arrays.rb +8 -0
- data/lib/refinements/files.rb +1 -0
- data/lib/refinements/hashes.rb +43 -2
- data/lib/refinements/identity.rb +1 -1
- data/lib/refinements/pathnames.rb +28 -2
- data/lib/refinements/string_ios.rb +13 -0
- data/lib/refinements/strings.rb +26 -27
- metadata +15 -14
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd72c4e1fda257b53dcd80a052db0ce99cd5b2987e531bea93f577e6b3b131f9
|
4
|
+
data.tar.gz: 67b83319903a39425640eb0534eab280e7cb138e588476c635c5192afb08758d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fab91775e301f8765dd3156ab91e6abdf9395bdf767fbf859f80a5d3ea2bbebabef8dbe9e5e5a65e33443082a13e127ce3d85c1384b3939d753347384dea99e
|
7
|
+
data.tar.gz: 74934f4fbb6336ad4c434961c865b826675a71b76f846faae7635e6e09d3aa99bd74a9c74d6f0289f2d63a0c3352c9e21aecb60e35c2485664879520b20a755d
|
checksums.yaml.gz.sig
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
!�������PW�F�nk���~9�z��Z�3�o�GŚ��kw�+�~�� X�P���r4x�vq�p]���Ͱ�?��AMJM��Oc�y.π���i�Ql�P^��΅g�7��d � :�/oJ��ݱ�Fl_N_:kI':�M���KE�W�P!
|
2
|
+
�k2����]
|
3
|
+
�RC���^��&��.����7W��T8-��:!�� /�?��5"Ix+��nOho�컎��r+���F���6m��%2P��f�
|
data.tar.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -18,6 +18,8 @@ toc::[]
|
|
18
18
|
* *Arrays*:
|
19
19
|
** `#compress` - Removes `nil` and empty values without modifying itself.
|
20
20
|
** `#compress!` - Removes `nil` and empty values while modifying itself.
|
21
|
+
** `#include` - Adds given array or elements without modifying itself.
|
22
|
+
** `#exclude` - Removes given array or elements without modifying itself.
|
21
23
|
** `#ring` - Answers a circular array which can enumerate before, current, after elements.
|
22
24
|
* *BigDecimals*:
|
23
25
|
** `#inspect` - Allows one to inspect a big decimal with numeric representation.
|
@@ -27,25 +29,39 @@ toc::[]
|
|
27
29
|
** `#rewrite` - When given a file path and a block, it provides the contents of the recently read
|
28
30
|
file for manipulation and immediate writing back to the same file.
|
29
31
|
* *Hashes*:
|
30
|
-
**
|
31
|
-
**
|
32
|
+
** `.infinite` - Answers new hash where missing keys, even deeply nested, answer an empty hash.
|
33
|
+
** `.with_default` - Answers new hash where every top-level missing key has the same default value.
|
34
|
+
** `#except` - Answers new hash with given keys removed without modifying itself.
|
35
|
+
** `#except!` - Answers new hash with given keys removed while modifying itself.
|
32
36
|
** `#symbolize_keys` - Converts keys to symbols without modifying itself.
|
33
37
|
** `#symbolize_keys!` - Converts keys to symbols while modifying itself.
|
34
38
|
** `#deep_merge` - Merges deeply nested hashes together without modifying itself.
|
35
39
|
** `#deep_merge!` - Merges deeply nested hashes together while modifying itself.
|
36
|
-
** `#
|
37
|
-
|
40
|
+
** `#deep_symbolize_keys` - Symbolizes keys of nested hash without modifying itself. Does not handle
|
41
|
+
nested arrays, though.
|
42
|
+
** `#deep_symbolize_keys!` - Symbolizes keys of nested hash while modifying itself. Does not handle
|
43
|
+
nested arrays, though.
|
44
|
+
** `#recurse` - Applies block to nested hash. Does not handle nested arrays, though.
|
45
|
+
** `#rekey` - Transforms keys per mapping (size of mapping can vary) without modifying itself.
|
46
|
+
** `#rekey!` - Transforms keys per mapping (size of mapping can vary) while modifying itself.
|
47
|
+
** `#reverse_merge` - Merges calling hash into passed in hash without modifying itself.
|
48
|
+
** `#reverse_merge!` - Merges calling hash into passed in hash while modifying itself.
|
38
49
|
** `#use` - Passes each hash value as a block argument for further processing.
|
39
50
|
* *Pathnames*:
|
51
|
+
** `Pathname` - Conversion function (refined from `Kernel`) which can cast `nil` into a pathname.
|
40
52
|
** `#name` - Answers file name without extension.
|
41
53
|
** `#copy` - Copies file from current location to new location.
|
54
|
+
** `#directories` - Answers all or filtered directories for current path.
|
42
55
|
** `#extensions` - Answers file extensions as an array.
|
43
|
-
** `#
|
56
|
+
** `#files` - Answers all or filtered files for current path.
|
57
|
+
** `#gsub` - Same behavior as `String#gsub` but answers a path with patterns replaced with desired
|
58
|
+
substitutes.
|
59
|
+
** `#relative_parent` - Answers relative path from parent directory. This is a complement to
|
44
60
|
`#relative_path_from`.
|
45
61
|
** `#make_ancestors` - Ensures all ancestor directories are created for a path.
|
46
62
|
** `#rewrite` - When given a block, it provides the contents of the recently read file for
|
47
63
|
manipulation and immediate writing back to the same file.
|
48
|
-
** `#touch` - Updates access and modification times to current time
|
64
|
+
** `#touch` - Updates access and modification times for path. Defaults to current time.
|
49
65
|
* *Strings*:
|
50
66
|
** `#first` - Answers first character of a string or first set of characters if given a number.
|
51
67
|
** `#last` - Answers last character of a string or last set of characters if given a number.
|
@@ -56,12 +72,15 @@ manipulation and immediate writing back to the same file.
|
|
56
72
|
** `#camelcase` - Answers a camelcased string.
|
57
73
|
** `#snakecase` - Answers a snakecased string.
|
58
74
|
** `#titleize` - Answers titleized string.
|
75
|
+
** `#to_bool` - Answers string as a boolean.
|
76
|
+
* *String IOs*:
|
77
|
+
** `#reread` - Answers full string by rewinding to beginning of string and reading all content.
|
59
78
|
|
60
79
|
== Requirements
|
61
80
|
|
62
|
-
. https://www.ruby-lang.org[Ruby
|
63
|
-
. A solid understanding of https://www.
|
64
|
-
scope].
|
81
|
+
. https://www.ruby-lang.org[Ruby].
|
82
|
+
. A solid understanding of link:https://www.alchemists.io/articles/ruby_refinements[Ruby refinements
|
83
|
+
and lexical scope].
|
65
84
|
|
66
85
|
== Setup
|
67
86
|
|
@@ -156,6 +175,12 @@ example = ["An", nil, "", "Example"]
|
|
156
175
|
example.compress! # => ["An", "Example"]
|
157
176
|
example # => ["An", "Example"]
|
158
177
|
|
178
|
+
[1, 2, 3].include [4, 5] # => [1, 2, 3, 4, 5]
|
179
|
+
[1, 2, 3].include 4, 5 # => [1, 2, 3, 4, 5]
|
180
|
+
|
181
|
+
[1, 2, 3, 4, 5].exclude [4, 5] # => [1, 2, 3]
|
182
|
+
[1, 2, 3, 4, 5].include 4, 5 # => [1, 2, 3, 4, 5]
|
183
|
+
|
159
184
|
example = [1, 2, 3]
|
160
185
|
example.ring # => #<Enumerator: ...>
|
161
186
|
example.ring { |(before, current, after)| puts "#{before} #{current} #{after}" }
|
@@ -189,6 +214,15 @@ File.rewrite("/test.txt") { |content| content.gsub "[placeholder]", "example" }
|
|
189
214
|
|
190
215
|
[source,ruby]
|
191
216
|
----
|
217
|
+
example = Hash.infinite
|
218
|
+
example[:a] # => {}
|
219
|
+
example[:a][:b][:c] # => {}
|
220
|
+
|
221
|
+
example = Hash.with_default ""
|
222
|
+
example[:a] # => ""
|
223
|
+
example = Hash.with_default []
|
224
|
+
example[:b] # => []
|
225
|
+
|
192
226
|
example = {a: 1, b: 2, c: 3}
|
193
227
|
example.except :a, :b # => {c: 3}
|
194
228
|
example # => {a: 1, b: 2, c: 3}
|
@@ -221,6 +255,26 @@ example = {a: "A", b: {one: "One", two: "Two"}}
|
|
221
255
|
example.deep_merge! b: {one: 1} # => {a: "A", b: {one: 1, two: "Two"}}
|
222
256
|
example # => {a: "A", b: {one: 1, two: "Two"}}
|
223
257
|
|
258
|
+
example = {"a" => {"b" => 2}}
|
259
|
+
example.deep_symbolize_keys # => {a: {b: 1}}
|
260
|
+
example # => {"a" => {"b" => 2}}
|
261
|
+
|
262
|
+
example = {"a" => {"b" => 2}}
|
263
|
+
example.deep_symbolize_keys! # => {a: {b: 1}}
|
264
|
+
example # => {a: {b: 1}}
|
265
|
+
|
266
|
+
example = {"a" => {"b" => 1}}
|
267
|
+
example.recurse(&:symbolize_keys) # => {a: {b: 1}}
|
268
|
+
example.recurse(&:invert) # => {{"b" => 1} => "a"}
|
269
|
+
|
270
|
+
example = {a: 1, b: 2, c: 3}
|
271
|
+
example.rekey a: :amber, b: :blue # => {amber: 1, blue: 2, c: 3}
|
272
|
+
example # => {a: 1, b: 2, c: 3}
|
273
|
+
|
274
|
+
example = {a: 1, b: 2, c: 3}
|
275
|
+
example.rekey! a: :amber, b: :blue # => {amber: 1, blue: 2, c: 3}
|
276
|
+
example # => {amber: 1, blue: 2, c: 3}
|
277
|
+
|
224
278
|
example = {a: 1, b: 2}
|
225
279
|
example.reverse_merge a: 0, c: 3 # => {a: 1, b: 2, c: 3}
|
226
280
|
example # => {a: 1, b: 2}
|
@@ -237,12 +291,25 @@ example.use { |unit, street| "#{unit} #{street}" } # => "221B Baker Street"
|
|
237
291
|
|
238
292
|
[source,ruby]
|
239
293
|
----
|
294
|
+
Pathname(nil) # => Pathname("")
|
295
|
+
|
240
296
|
Pathname("example.txt").name # => Pathname("example")
|
241
297
|
|
242
298
|
Pathname("input.txt").copy Pathname("output.txt")
|
243
299
|
|
300
|
+
Pathname("/example").directories # => [Pathname("a"), Pathname("b")]
|
301
|
+
Pathname("/example").directories "a*" # => [Pathname("a")]
|
302
|
+
Pathname("/example").directories flag: File::FNM_DOTMATCH # => [Pathname(".."), Pathname(".")]
|
303
|
+
|
244
304
|
Pathname("example.txt.erb").extensions # => [".txt", ".erb"]
|
245
305
|
|
306
|
+
Pathname("/example").files # => [Pathname("a.txt"), Pathname("a.png")]
|
307
|
+
Pathname("/example").files "*.png" # => [Pathname("a.png")]
|
308
|
+
Pathname("/example").files flag: File::FNM_DOTMATCH # => [Pathname(".ruby-version")]
|
309
|
+
|
310
|
+
Pathname("/a/path/some/path").gsub("path", "test") # => Pathname("/a/test/some/test")
|
311
|
+
Pathname("/%placeholder%/some/%placeholder%").gsub("%placeholder%", "test") # => Pathname("/test/some/test")
|
312
|
+
|
246
313
|
Pathname("/one/two/three").relative_parent_from("/one") # => Pathname "two"
|
247
314
|
|
248
315
|
Pathname("/one/two").make_ancestors
|
@@ -252,7 +319,7 @@ Pathname("/one/two").exist? # => false
|
|
252
319
|
Pathname("/test.txt").rewrite { |content| content.sub "[placeholder]", "example" }
|
253
320
|
|
254
321
|
Pathname("example.txt").touch
|
255
|
-
Pathname("example.txt").touch
|
322
|
+
Pathname("example.txt").touch at: Time.now - 1
|
256
323
|
----
|
257
324
|
|
258
325
|
==== String
|
@@ -266,11 +333,37 @@ Pathname("example.txt").touch accessed_at: Time.now - 1, modified_at: Time.now -
|
|
266
333
|
"instant".last 3 # => "ant"
|
267
334
|
|
268
335
|
" \n\t\r".blank? # => true
|
336
|
+
|
269
337
|
"example".up # => "Example"
|
338
|
+
|
270
339
|
"EXAMPLE".down # => "eXAMPLE"
|
340
|
+
|
271
341
|
"this_is_an_example".camelcase # => "ThisIsAnExample"
|
342
|
+
|
272
343
|
"ThisIsAnExample".snakecase # => "this_is_an_example"
|
344
|
+
|
273
345
|
"ThisIsAnExample".titleize # => "This Is An Example"
|
346
|
+
|
347
|
+
"true".to_bool # => true
|
348
|
+
"yes".to_bool # => true
|
349
|
+
"1".to_bool # => true
|
350
|
+
"".to_bool # => false
|
351
|
+
"example".to_bool # => false
|
352
|
+
----
|
353
|
+
|
354
|
+
==== String IO
|
355
|
+
|
356
|
+
[source,ruby]
|
357
|
+
----
|
358
|
+
io = StringIO.new
|
359
|
+
io.write "This is a test."
|
360
|
+
io.reread # => "This is a test."
|
361
|
+
|
362
|
+
io.reread(4) => "This"
|
363
|
+
|
364
|
+
buffer = "".dup
|
365
|
+
io.reread(buffer: buffer)
|
366
|
+
buffer # => "This is a test."
|
274
367
|
----
|
275
368
|
|
276
369
|
== Tests
|
data/lib/refinements.rb
CHANGED
data/lib/refinements/arrays.rb
CHANGED
data/lib/refinements/files.rb
CHANGED
data/lib/refinements/hashes.rb
CHANGED
@@ -2,6 +2,16 @@
|
|
2
2
|
|
3
3
|
module Refinements
|
4
4
|
module Hashes
|
5
|
+
refine Hash.singleton_class do
|
6
|
+
def infinite
|
7
|
+
new { |new_hash, missing_key| new_hash[missing_key] = new(&new_hash.default_proc) }
|
8
|
+
end
|
9
|
+
|
10
|
+
def with_default value
|
11
|
+
new { |new_hash, missing_key| new_hash[missing_key] = value }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
5
15
|
refine Hash do
|
6
16
|
def except *keys
|
7
17
|
reject { |key, _value| keys.include? key }
|
@@ -23,10 +33,11 @@ module Refinements
|
|
23
33
|
dup.deep_merge! other
|
24
34
|
end
|
25
35
|
|
26
|
-
# :reek:FeatureEnvy
|
27
36
|
def deep_merge! other
|
37
|
+
clazz = self.class
|
38
|
+
|
28
39
|
merge! other do |_key, this_value, other_value|
|
29
|
-
if this_value.is_a?(
|
40
|
+
if this_value.is_a?(clazz) && other_value.is_a?(clazz)
|
30
41
|
this_value.deep_merge other_value
|
31
42
|
else
|
32
43
|
other_value
|
@@ -34,11 +45,41 @@ module Refinements
|
|
34
45
|
end
|
35
46
|
end
|
36
47
|
|
48
|
+
def deep_symbolize_keys
|
49
|
+
recurse(&:symbolize_keys)
|
50
|
+
end
|
51
|
+
|
52
|
+
def deep_symbolize_keys!
|
53
|
+
recurse(&:symbolize_keys!)
|
54
|
+
end
|
55
|
+
|
56
|
+
def recurse &block
|
57
|
+
return self unless block_given?
|
58
|
+
|
59
|
+
transform = yield self
|
60
|
+
|
61
|
+
transform.each do |key, value|
|
62
|
+
transform[key] = value.recurse(&block) if value.is_a? self.class
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def rekey mapping = {}
|
67
|
+
return self if mapping.empty?
|
68
|
+
|
69
|
+
transform_keys { |key| mapping[key] || key }
|
70
|
+
end
|
71
|
+
|
72
|
+
def rekey! mapping = {}
|
73
|
+
replace rekey(mapping)
|
74
|
+
end
|
75
|
+
|
37
76
|
def reverse_merge other
|
77
|
+
warn "[DEPRECATION]: #reverse_merge is deprecated, use #merge instead."
|
38
78
|
other.merge self
|
39
79
|
end
|
40
80
|
|
41
81
|
def reverse_merge! other
|
82
|
+
warn "[DEPRECATION]: #reverse_merge! is deprecated, use #merge! instead."
|
42
83
|
merge!(other) { |_key, old_value, _new_value| old_value }
|
43
84
|
end
|
44
85
|
|
data/lib/refinements/identity.rb
CHANGED
@@ -4,6 +4,14 @@ require "pathname"
|
|
4
4
|
|
5
5
|
module Refinements
|
6
6
|
module Pathnames
|
7
|
+
refine Kernel do
|
8
|
+
def Pathname object
|
9
|
+
return super(String(object)) unless object
|
10
|
+
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
7
15
|
refine Pathname do
|
8
16
|
def name
|
9
17
|
basename extname
|
@@ -15,12 +23,30 @@ module Refinements
|
|
15
23
|
self
|
16
24
|
end
|
17
25
|
|
26
|
+
def directories pattern = "*", flag: File::FNM_SYSCASE
|
27
|
+
glob(pattern, flag).select(&:directory?).sort
|
28
|
+
end
|
29
|
+
|
18
30
|
def extensions
|
19
31
|
basename.to_s.split(/(?=\.)+/).tap(&:shift)
|
20
32
|
end
|
21
33
|
|
22
|
-
def
|
23
|
-
|
34
|
+
def files pattern = "*", flag: File::FNM_SYSCASE
|
35
|
+
glob(pattern, flag).select(&:file?).sort
|
36
|
+
end
|
37
|
+
|
38
|
+
def gsub pattern, replacement
|
39
|
+
self.class.new to_s.gsub(pattern, replacement)
|
40
|
+
end
|
41
|
+
|
42
|
+
def relative_parent root_dir
|
43
|
+
relative_path_from(root_dir).parent
|
44
|
+
end
|
45
|
+
|
46
|
+
def relative_parent_from root_dir
|
47
|
+
warn "[DEPRECATION]: Pathname#relative_parent_from is deprecated, " \
|
48
|
+
"use Pathname#relative_parent instead."
|
49
|
+
relative_parent root_dir
|
24
50
|
end
|
25
51
|
|
26
52
|
def make_ancestors
|
data/lib/refinements/strings.rb
CHANGED
@@ -2,9 +2,12 @@
|
|
2
2
|
|
3
3
|
module Refinements
|
4
4
|
module Strings
|
5
|
+
DELIMITERS = %r([a-z][A-Z]|\s*-\s*|\s*/\s*|\s*:+\s*|\s*_\s*|\s+).freeze
|
6
|
+
|
5
7
|
refine String.singleton_class do
|
6
8
|
def delimiters
|
7
|
-
|
9
|
+
warn "[DEPRECATION]: .delimiters is deprecated, use DELIMITERS instead."
|
10
|
+
DELIMITERS
|
8
11
|
end
|
9
12
|
end
|
10
13
|
|
@@ -17,20 +20,18 @@ module Refinements
|
|
17
20
|
return self[0] if max.zero?
|
18
21
|
return "" if max.negative?
|
19
22
|
|
20
|
-
self[
|
23
|
+
self[..(max - 1)]
|
21
24
|
end
|
22
25
|
|
23
|
-
# :reek:TooManyStatements
|
24
26
|
def last number = 0
|
25
27
|
return self if empty?
|
26
28
|
|
27
29
|
min = Integer number
|
28
|
-
max = size - 1
|
29
30
|
|
30
|
-
return self[
|
31
|
+
return self[size - 1] if min.zero?
|
31
32
|
return "" if min.negative?
|
32
33
|
|
33
|
-
self[(min + 1)..
|
34
|
+
self[(min + 1)..]
|
34
35
|
end
|
35
36
|
|
36
37
|
def blank?
|
@@ -50,33 +51,31 @@ module Refinements
|
|
50
51
|
end
|
51
52
|
|
52
53
|
def camelcase
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
up
|
59
|
-
end
|
54
|
+
return up unless match? DELIMITERS
|
55
|
+
|
56
|
+
split(%r(\s*-\s*|\s*/\s*|\s*:+\s*)).then { |parts| combine parts, :up, "::" }
|
57
|
+
.then { |text| text.split(/\s*_\s*|\s+/) }
|
58
|
+
.then { |parts| combine parts, :up }
|
60
59
|
end
|
61
60
|
|
62
61
|
def snakecase
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
downcase
|
69
|
-
end
|
62
|
+
return downcase unless match? DELIMITERS
|
63
|
+
|
64
|
+
split(%r(\s*-\s*|\s*/\s*|\s*:+\s*)).then { |parts| combine parts, :down, "/" }
|
65
|
+
.then { |text| text.split(/(?=[A-Z])|\s*_\s*|\s+/) }
|
66
|
+
.then { |parts| combine parts, :down, "_" }
|
70
67
|
end
|
71
68
|
|
72
69
|
def titleize
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
70
|
+
return capitalize unless match? DELIMITERS
|
71
|
+
|
72
|
+
split(/(?=[A-Z])|\s*_\s*|\s*-\s*|\s+/).then { |parts| combine parts, :up, " " }
|
73
|
+
.then { |text| text.split %r(\s*/\s*|\s*:+\s*) }
|
74
|
+
.then { |parts| combine parts, :up, "/" }
|
75
|
+
end
|
76
|
+
|
77
|
+
def to_bool
|
78
|
+
%w[true yes on t y 1].include? downcase.strip
|
80
79
|
end
|
81
80
|
|
82
81
|
private
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: refinements
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
11
|
- |
|
@@ -28,7 +28,7 @@ cert_chain:
|
|
28
28
|
2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
|
29
29
|
QWc=
|
30
30
|
-----END CERTIFICATE-----
|
31
|
-
date: 2020-
|
31
|
+
date: 2020-08-29 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: bundler-audit
|
@@ -50,28 +50,28 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '14.
|
53
|
+
version: '14.2'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '14.
|
60
|
+
version: '14.2'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
|
-
name: git-
|
62
|
+
name: git-lint
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
67
|
+
version: '1.0'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '1.0'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: guard-rspec
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,14 +162,14 @@ dependencies:
|
|
162
162
|
requirements:
|
163
163
|
- - "~>"
|
164
164
|
- !ruby/object:Gem::Version
|
165
|
-
version: '0.
|
165
|
+
version: '0.89'
|
166
166
|
type: :development
|
167
167
|
prerelease: false
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
169
|
requirements:
|
170
170
|
- - "~>"
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
version: '0.
|
172
|
+
version: '0.89'
|
173
173
|
- !ruby/object:Gem::Dependency
|
174
174
|
name: rubocop-performance
|
175
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -226,7 +226,7 @@ dependencies:
|
|
226
226
|
- - "~>"
|
227
227
|
- !ruby/object:Gem::Version
|
228
228
|
version: '0.18'
|
229
|
-
description:
|
229
|
+
description:
|
230
230
|
email:
|
231
231
|
- brooke@alchemists.io
|
232
232
|
executables: []
|
@@ -245,6 +245,7 @@ files:
|
|
245
245
|
- lib/refinements/hashes.rb
|
246
246
|
- lib/refinements/identity.rb
|
247
247
|
- lib/refinements/pathnames.rb
|
248
|
+
- lib/refinements/string_ios.rb
|
248
249
|
- lib/refinements/strings.rb
|
249
250
|
homepage: https://www.alchemists.io/projects/refinements
|
250
251
|
licenses:
|
@@ -254,7 +255,7 @@ metadata:
|
|
254
255
|
changelog_uri: https://www.alchemists.io/projects/refinements/changes.html
|
255
256
|
documentation_uri: https://www.alchemists.io/projects/refinements
|
256
257
|
source_code_uri: https://github.com/bkuhlmann/refinements
|
257
|
-
post_install_message:
|
258
|
+
post_install_message:
|
258
259
|
rdoc_options: []
|
259
260
|
require_paths:
|
260
261
|
- lib
|
@@ -269,8 +270,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
269
270
|
- !ruby/object:Gem::Version
|
270
271
|
version: '0'
|
271
272
|
requirements: []
|
272
|
-
rubygems_version: 3.1.
|
273
|
-
signing_key:
|
273
|
+
rubygems_version: 3.1.4
|
274
|
+
signing_key:
|
274
275
|
specification_version: 4
|
275
276
|
summary: A collection of refinements to core Ruby objects.
|
276
277
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|