refinements 10.1.1 → 11.0.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 +0 -0
- data/README.adoc +86 -17
- data/lib/refinements/arrays.rb +28 -1
- data/lib/refinements/pathnames.rb +1 -3
- data/lib/refinements/strings.rb +2 -2
- data/refinements.gemspec +2 -2
- data.tar.gz.sig +0 -0
- metadata +4 -4
- 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: 252744b620f3c79a0c38b635157f62fc9e48527701145e871de885c547b44b61
|
4
|
+
data.tar.gz: 411b88c5cf6b9b95c59c43055b8a2402c95d9954b612837fce70a106c4c4a5f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c12fb201556e5949190657cd591b126115ba7efb9f14aec4aeb107455d7cd04676b0dd1cc05f84e9bdd8b7c61e2fbadbabe377b739ffd14a643c3d98d717068
|
7
|
+
data.tar.gz: db75e0359afed8603daba0bae481b8e839b9d9ede700ef22bbcde22116e2a75b221b5d56d0381500ccf992f73c11cb7a4555823c4294b131077972800a03f3c1
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -31,18 +31,34 @@ Enhances the following objects:
|
|
31
31
|
|
32
32
|
== Setup
|
33
33
|
|
34
|
-
To install, run:
|
34
|
+
To install _with_ security, run:
|
35
|
+
|
36
|
+
[source,bash]
|
37
|
+
----
|
38
|
+
# 💡 Skip this line if you already have the public certificate installed.
|
39
|
+
gem cert --add <(curl --compressed --location https://alchemists.io/gems.pem)
|
40
|
+
gem install refinements --trust-policy HighSecurity
|
41
|
+
----
|
42
|
+
|
43
|
+
To install _without_ security, run:
|
35
44
|
|
36
45
|
[source,bash]
|
37
46
|
----
|
38
47
|
gem install refinements
|
39
48
|
----
|
40
49
|
|
41
|
-
|
50
|
+
You can also add the gem directly to your project:
|
51
|
+
|
52
|
+
[source,bash]
|
53
|
+
----
|
54
|
+
bundle add refinements
|
55
|
+
----
|
56
|
+
|
57
|
+
Once the gem is installed, you only need to require it:
|
42
58
|
|
43
59
|
[source,ruby]
|
44
60
|
----
|
45
|
-
|
61
|
+
require "refinements"
|
46
62
|
----
|
47
63
|
|
48
64
|
== Usage
|
@@ -262,6 +278,46 @@ needs to be a specific size with padded values.
|
|
262
278
|
[1, 2].pad 3, max: 3 # [1, 2, 3]
|
263
279
|
----
|
264
280
|
|
281
|
+
===== #pick
|
282
|
+
|
283
|
+
Answers value of first element that matches given key.
|
284
|
+
|
285
|
+
[source,ruby]
|
286
|
+
----
|
287
|
+
array = [{name: "a", label: "A"}, {name: "b", label: "B"}, {name: "c", label: "C"}]
|
288
|
+
|
289
|
+
array.pick :name # "a"
|
290
|
+
array.pick :name, :label # ["a", "A"]
|
291
|
+
array.pick # nil
|
292
|
+
[].pick(:test) # nil
|
293
|
+
----
|
294
|
+
|
295
|
+
===== #pluck
|
296
|
+
|
297
|
+
Answers values of all elements that match given keys.
|
298
|
+
|
299
|
+
[source,ruby]
|
300
|
+
----
|
301
|
+
array = [{name: "a", label: "A"}, {name: "b", label: "B"}, {name: "c", label: "C"}]
|
302
|
+
|
303
|
+
array.pluck :name # ["a", "b", "c"]
|
304
|
+
array.pluck :name, :label # [["a", "A"], ["b", "B"], ["c", "C"]]
|
305
|
+
array.pluck # []
|
306
|
+
[].pluck :test # []
|
307
|
+
----
|
308
|
+
|
309
|
+
===== #replace_at
|
310
|
+
|
311
|
+
Answers mutated array where an element -- at a specific index -- is replaced by single or multiple elements.
|
312
|
+
|
313
|
+
[source,ruby]
|
314
|
+
----
|
315
|
+
%i[a b c].replace_at(0, :x) # [:x, :b, :c]
|
316
|
+
%i[a b c].replace_at(1, :x) # [:a, :x, :c]
|
317
|
+
%i[a b c].replace_at(1, :x, :y) # [:a, :x, :y, :c]
|
318
|
+
%i[a b c].replace_at(-1, :x) # [:a, :b, :x]
|
319
|
+
----
|
320
|
+
|
265
321
|
===== #ring
|
266
322
|
|
267
323
|
Answers a circular array which can enumerate before, current, after elements.
|
@@ -303,17 +359,31 @@ Answers mutated array where all target elements are replaced by single or multip
|
|
303
359
|
|
304
360
|
===== #to_sentence
|
305
361
|
|
306
|
-
Answers a sentence using `"
|
362
|
+
Answers a sentence using `"and"` as the default conjunction and `", "` as the default delimiter.
|
307
363
|
Useful when building documentation, answering human readable error messages, etc.
|
308
364
|
|
309
365
|
[source,ruby]
|
310
366
|
----
|
311
|
-
[].to_sentence
|
312
|
-
["test"].to_sentence
|
313
|
-
["a", :b].to_sentence
|
314
|
-
[1, "a", :b, 2.0, /\w+/].map(&:inspect).to_sentence
|
315
|
-
%w[one two three].to_sentence
|
316
|
-
%w[eins zwei drei].to_sentence
|
367
|
+
[].to_sentence # ""
|
368
|
+
["test"].to_sentence # "test"
|
369
|
+
["a", :b].to_sentence # "a and b"
|
370
|
+
[1, "a", :b, 2.0, /\w+/].map(&:inspect).to_sentence # 1, "a", :b, 2.0, and /\w+/
|
371
|
+
%w[one two three].to_sentence # "one, two, and three"
|
372
|
+
%w[eins zwei drei].to_sentence "und", delimiter: " " # "eins zwei und drei"
|
373
|
+
----
|
374
|
+
|
375
|
+
===== #to_usage
|
376
|
+
|
377
|
+
Builds upon and enhances `#to_sentence` further by answering a sentence which all elements are inspected -- where each element of the array is called with `#inspect` -- before turned into a sentence using `"and"` as the default conjunction and `", "` as the default delimiter. This is useful when providing detailed error messages _and_ you need to show the element types used.
|
378
|
+
|
379
|
+
[source,ruby]
|
380
|
+
----
|
381
|
+
[].to_usage # ""
|
382
|
+
["test"].to_usage # "test"
|
383
|
+
["a", :b].to_usage # "a and b"
|
384
|
+
[1, "a", :b, 2.0, /\w+/].map(&:inspect).to_usage # 1, "a", :b, 2.0, and /\w+/
|
385
|
+
%w[one two three].to_usage # "one, two, and three"
|
386
|
+
%w[eins zwei drei].to_usage "und", delimiter: " " # "eins zwei und drei"
|
317
387
|
----
|
318
388
|
|
319
389
|
==== Big Decimal
|
@@ -813,8 +883,7 @@ Pathname.make_temp_dir { |path| path.join "sub_dir" } # Pathname:/var/fol
|
|
813
883
|
|
814
884
|
===== .require_tree
|
815
885
|
|
816
|
-
Requires all files in given root path and corresponding nested tree structure. All files are sorted
|
817
|
-
before being required to ensure consistent behavior. Example:
|
886
|
+
Requires all Ruby files in given root path and corresponding nested tree structure. All files are sorted before being required to ensure consistent behavior. Example:
|
818
887
|
|
819
888
|
[source,ruby]
|
820
889
|
----
|
@@ -1142,11 +1211,11 @@ Answers indentation (string) which is the result of the multiplier times padding
|
|
1142
1211
|
|
1143
1212
|
[source,ruby]
|
1144
1213
|
----
|
1145
|
-
"example".indent
|
1146
|
-
"example".indent 0
|
1147
|
-
"example".indent -1
|
1148
|
-
"example".indent 2
|
1149
|
-
"example".indent 3,
|
1214
|
+
"example".indent # " example"
|
1215
|
+
"example".indent 0 # "example"
|
1216
|
+
"example".indent -1 # "example"
|
1217
|
+
"example".indent 2 # " example"
|
1218
|
+
"example".indent 3, pad: " " # " example"
|
1150
1219
|
----
|
1151
1220
|
|
1152
1221
|
===== #last
|
data/lib/refinements/arrays.rb
CHANGED
@@ -33,6 +33,29 @@ module Refinements
|
|
33
33
|
|
34
34
|
def pad(value, max: size) = dup.fill(value, size..(max - 1))
|
35
35
|
|
36
|
+
def pick(*keys)
|
37
|
+
return if empty?
|
38
|
+
|
39
|
+
keys.many? ? keys.map { |key| first[key] } : first[keys.first]
|
40
|
+
end
|
41
|
+
|
42
|
+
def pluck(*keys)
|
43
|
+
return dup if empty?
|
44
|
+
return [] if keys.empty?
|
45
|
+
|
46
|
+
if keys.many?
|
47
|
+
map { |element| keys.map { |key| element[key] } }
|
48
|
+
else
|
49
|
+
key = keys.first
|
50
|
+
map { |element| element[key] }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def replace_at(index, *elements)
|
55
|
+
delete_at index
|
56
|
+
insert(index, *elements)
|
57
|
+
end
|
58
|
+
|
36
59
|
def ring(&) = [last, *self, first].each_cons(3, &)
|
37
60
|
|
38
61
|
def supplant target, *replacements
|
@@ -49,13 +72,17 @@ module Refinements
|
|
49
72
|
self
|
50
73
|
end
|
51
74
|
|
52
|
-
def to_sentence
|
75
|
+
def to_sentence conjunction = "and", delimiter: ", "
|
53
76
|
case length
|
54
77
|
when (3..) then "#{self[..-2].join delimiter}#{delimiter}#{conjunction} #{last}"
|
55
78
|
when 2 then join " #{conjunction} "
|
56
79
|
else join
|
57
80
|
end
|
58
81
|
end
|
82
|
+
|
83
|
+
def to_usage conjunction = "and", delimiter: ", "
|
84
|
+
map(&:inspect).to_sentence conjunction, delimiter:
|
85
|
+
end
|
59
86
|
end
|
60
87
|
end
|
61
88
|
end
|
@@ -24,9 +24,7 @@ module Refinements
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def require_tree
|
28
|
-
new(root).files(pattern).each { |path| require path.to_s }
|
29
|
-
end
|
27
|
+
def require_tree(root) = new(root).files("**/*.rb").each { |path| require path.to_s }
|
30
28
|
|
31
29
|
def root = new(File::SEPARATOR)
|
32
30
|
end
|
data/lib/refinements/strings.rb
CHANGED
@@ -26,8 +26,8 @@ module Refinements
|
|
26
26
|
self[..(maximum - 1)]
|
27
27
|
end
|
28
28
|
|
29
|
-
def indent multiplier = 1,
|
30
|
-
multiplier.negative? ? self : (
|
29
|
+
def indent multiplier = 1, pad: " "
|
30
|
+
multiplier.negative? ? self : (pad * multiplier) + self
|
31
31
|
end
|
32
32
|
|
33
33
|
def last minimum = 0
|
data/refinements.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "refinements"
|
5
|
-
spec.version = "
|
5
|
+
spec.version = "11.0.0"
|
6
6
|
spec.authors = ["Brooke Kuhlmann"]
|
7
7
|
spec.email = ["brooke@alchemists.io"]
|
8
8
|
spec.homepage = "https://alchemists.io/projects/refinements"
|
9
|
-
spec.summary = "A collection of
|
9
|
+
spec.summary = "A collection of core Ruby object refinements."
|
10
10
|
spec.license = "Hippocratic-2.1"
|
11
11
|
|
12
12
|
spec.metadata = {
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: refinements
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 11.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
|
36
36
|
gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2023-
|
38
|
+
date: 2023-06-13 00:00:00.000000000 Z
|
39
39
|
dependencies: []
|
40
40
|
description:
|
41
41
|
email:
|
@@ -90,8 +90,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
|
-
rubygems_version: 3.4.
|
93
|
+
rubygems_version: 3.4.14
|
94
94
|
signing_key:
|
95
95
|
specification_version: 4
|
96
|
-
summary: A collection of
|
96
|
+
summary: A collection of core Ruby object refinements.
|
97
97
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|