refinements 10.1.0 → 11.0.0

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: acd50ef5bb4db84f4db8c509c2deab9203e0e7c036e880d43ed047d540c961cf
4
- data.tar.gz: df6ebf181b200aeb38f14f3f691f844735e1e352741bc6e7cd667970c5b81b6a
3
+ metadata.gz: 252744b620f3c79a0c38b635157f62fc9e48527701145e871de885c547b44b61
4
+ data.tar.gz: 411b88c5cf6b9b95c59c43055b8a2402c95d9954b612837fce70a106c4c4a5f1
5
5
  SHA512:
6
- metadata.gz: 53703faa9a8b2941e562561a1f9edf22920fdd3934e7d6b55ec3e4290ad18d3e6282e96733c658accf58d475e6f0f78a6687c4777cb7fe2bc49edfdb9707b17b
7
- data.tar.gz: 0ddb2f12bb1fcd7aefc06f6c9f2ce891c9929828a79162610824a8a5cf3ffa991d476118f9c5a106fb681c9603a6b8c1ba0dbeaf80004317c990b4673152f8ff
6
+ metadata.gz: 0c12fb201556e5949190657cd591b126115ba7efb9f14aec4aeb107455d7cd04676b0dd1cc05f84e9bdd8b7c61e2fbadbabe377b739ffd14a643c3d98d717068
7
+ data.tar.gz: db75e0359afed8603daba0bae481b8e839b9d9ede700ef22bbcde22116e2a75b221b5d56d0381500ccf992f73c11cb7a4555823c4294b131077972800a03f3c1
checksums.yaml.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -4,11 +4,7 @@
4
4
 
5
5
  = Refinements
6
6
 
7
- Refinements are a collection primitive Ruby objects enhancements without needing to resort to hard
8
- to debug link:https://alchemists.io/articles/ruby_antipatterns/#_monkey_patches[monkey patches].
9
- These refinements give you additional syntactic sugar to develop clean and concise implementations
10
- while using less code. By refining our code we can acquire the functionality we wish the core
11
- primitives had!
7
+ These refinements augment and enhance Ruby primitives so you can avoid link:https://alchemists.io/articles/ruby_antipatterns/#_monkey_patches[monkey patches]. They also allow you to develop clean and concise implementations while using less code. By refining your code, you can acquire the functionality you wish the core primitives had!
12
8
 
13
9
  toc::[]
14
10
 
@@ -31,30 +27,45 @@ Enhances the following objects:
31
27
  == Requirements
32
28
 
33
29
  . https://www.ruby-lang.org[Ruby].
34
- . A solid understanding of link:https://alchemists.io/articles/ruby_refinements[Ruby refinements
35
- and lexical scope].
30
+ . A solid understanding of link:https://alchemists.io/articles/ruby_refinements[refinements].
36
31
 
37
32
  == Setup
38
33
 
39
- 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:
40
44
 
41
45
  [source,bash]
42
46
  ----
43
47
  gem install refinements
44
48
  ----
45
49
 
46
- Add the following to your Gemfile file:
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:
47
58
 
48
59
  [source,ruby]
49
60
  ----
50
- gem "refinements"
61
+ require "refinements"
51
62
  ----
52
63
 
53
64
  == Usage
54
65
 
55
66
  === Requires
56
67
 
57
- If all refinements are not desired, add the following to your `+Gemfile+` instead:
68
+ If no refinements are desired, then add the following to your `Gemfile` instead:
58
69
 
59
70
  [source,ruby]
60
71
  ----
@@ -195,7 +206,7 @@ Adds given array or elements without mutating itself.
195
206
 
196
207
  ===== #intersperse
197
208
 
198
- Inserts additional elements or array between all members of given array.
209
+ Inserts additional elements or an array between all members of given array.
199
210
 
200
211
  [source,ruby]
201
212
  ----
@@ -267,6 +278,46 @@ needs to be a specific size with padded values.
267
278
  [1, 2].pad 3, max: 3 # [1, 2, 3]
268
279
  ----
269
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
+
270
321
  ===== #ring
271
322
 
272
323
  Answers a circular array which can enumerate before, current, after elements.
@@ -308,17 +359,31 @@ Answers mutated array where all target elements are replaced by single or multip
308
359
 
309
360
  ===== #to_sentence
310
361
 
311
- Answers a sentence using `", "` as the default delimiter and `"and"` as the default conjunction.
362
+ Answers a sentence using `"and"` as the default conjunction and `", "` as the default delimiter.
312
363
  Useful when building documentation, answering human readable error messages, etc.
313
364
 
314
365
  [source,ruby]
315
366
  ----
316
- [].to_sentence # ""
317
- ["test"].to_sentence # "test"
318
- ["a", :b].to_sentence # "a and b"
319
- [1, "a", :b, 2.0, /\w+/].map(&:inspect).to_sentence # 1, "a", :b, 2.0, and /\w+/
320
- %w[one two three].to_sentence # "one, two, and three"
321
- %w[eins zwei drei].to_sentence delimiter: " ", conjunction: "und" # "eins zwei und drei"
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"
322
387
  ----
323
388
 
324
389
  ==== Big Decimal
@@ -371,7 +436,7 @@ example[:b] # []
371
436
 
372
437
  ===== #compress
373
438
 
374
- Removes `nil` and empty objects without mutating itself. Answers itself if there is nothing to remove.
439
+ Removes `nil` and empty objects without mutating itself. Answers itself if nothing to remove.
375
440
 
376
441
  [source,ruby]
377
442
  ----
@@ -386,7 +451,7 @@ example # {a: 1, b: "blueberry", c: nil, d: "", e: [], f: {}, g:
386
451
 
387
452
  ===== #compress!
388
453
 
389
- Removes `nil` and empty objects while mutating itself. Answers `nil` if there is nothing to remove.
454
+ Removes `nil` and empty objects while mutating itself. Answers `nil` if nothing to remove.
390
455
 
391
456
  [source,ruby]
392
457
  ----
@@ -584,9 +649,7 @@ example # {a: 1, b: 2}
584
649
 
585
650
  ===== #transform_with
586
651
 
587
- Transforms key/value pairs based on specific operations where each operation (i.e. function that responds to the `call` message). Does not mutate itself.
588
-
589
- You can transform multiple values at once:
652
+ Transforms values of keys using specific operations (i.e. any object that responds to `#call`). Does not mutate itself and you can transform multiple values at once:
590
653
 
591
654
  [source,ruby]
592
655
  ----
@@ -605,7 +668,7 @@ example.transform_with bogus: -> value { value.tr "<>", "" }
605
668
  # {email: "<jd@example.com>"}
606
669
  ----
607
670
 
608
- The original object will not be mutated:
671
+ The original object _will not_ be mutated:
609
672
 
610
673
  [source,ruby]
611
674
  ----
@@ -614,9 +677,7 @@ example # {name: "Jayne Doe", email: "<jd@example.com>"}
614
677
 
615
678
  ===== #transform_with!
616
679
 
617
- Transforms key/value pairs based on specific operations where each operation (i.e. function that responds to the `call` message). Mutates itself.
618
-
619
- You can transform multiple values at once:
680
+ Transforms values of keys using specific operations (i.e. any object that responds to `#call`). Mutates itself and you can transform multiple values at once:
620
681
 
621
682
  [source,ruby]
622
683
  ----
@@ -635,7 +696,7 @@ example.transform_with! bogus: -> value { value.tr "<>", "" }
635
696
  # {email: "<jd@example.com>"}
636
697
  ----
637
698
 
638
- The original object will be mutated:
699
+ The original object _will be_ mutated:
639
700
 
640
701
  [source,ruby]
641
702
  ----
@@ -644,7 +705,7 @@ example # {name: "Jayne", email: "jd@example.com"}
644
705
 
645
706
  ===== #use
646
707
 
647
- Passes each hash value as a block argument for further processing.
708
+ Uses the hash's keys as block arguments where the value of the block argument is equal to the value of the key found within the hash. Works best with hashes that use symbols for keys but falls back to string keys when symbol keys can't be found.
648
709
 
649
710
  [source,ruby]
650
711
  ----
@@ -822,8 +883,7 @@ Pathname.make_temp_dir { |path| path.join "sub_dir" } # Pathname:/var/fol
822
883
 
823
884
  ===== .require_tree
824
885
 
825
- Requires all files in given root path and corresponding nested tree structure. All files are sorted
826
- 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:
827
887
 
828
888
  [source,ruby]
829
889
  ----
@@ -1147,15 +1207,15 @@ Answers first character of a string or first set of characters if given a number
1147
1207
 
1148
1208
  ===== #indent
1149
1209
 
1150
- Answers string indented by two spaces by default.
1210
+ Answers indentation (string) which is the result of the multiplier times padding. By default, the multiplier is `1` and the padding is `" "` which equates to two spaces.
1151
1211
 
1152
1212
  [source,ruby]
1153
1213
  ----
1154
- "example".indent # " example"
1155
- "example".indent 0 # "example"
1156
- "example".indent -1 # "example"
1157
- "example".indent 2 # " example"
1158
- "example".indent 3, padding: " " # " example"
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"
1159
1219
  ----
1160
1220
 
1161
1221
  ===== #last
@@ -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 delimiter: ", ", conjunction: "and"
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
@@ -6,7 +6,7 @@ module Refinements
6
6
  # Provides additional enhancements to the BigDecimal primitive.
7
7
  module BigDecimals
8
8
  refine BigDecimal do
9
- def inspect = format("#<BigDecimal:%{id} %{string}>", id: object_id, string: to_s("F"))
9
+ def inspect = format("#<BigDecimal:%<id>s %<string>s>", id: object_id, string: to_s("F"))
10
10
  end
11
11
  end
12
12
  end
@@ -85,7 +85,7 @@ module Refinements
85
85
  return [] unless block
86
86
 
87
87
  block.parameters
88
- .map { |(_type, key)| self[key] }
88
+ .map { |(_type, key)| self[key] || self[key.to_s] }
89
89
  .then { |values| yield values }
90
90
  end
91
91
  end
@@ -24,9 +24,7 @@ module Refinements
24
24
  end
25
25
  end
26
26
 
27
- def require_tree root, pattern = "**/*.rb"
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
@@ -26,8 +26,8 @@ module Refinements
26
26
  self[..(maximum - 1)]
27
27
  end
28
28
 
29
- def indent multiplier = 1, padding: " "
30
- multiplier.negative? ? self : (padding * multiplier) + 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 = "10.1.0"
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 refinements to core Ruby objects."
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
@@ -1,2 +1,3 @@
1
- �ED�j���ѹ��ĜF��FCށ:ϳ��'�� ;o^џ�xSm\'�̤`�dg��i��uw(�G��o�K"`� ��fq�BjMz��&<���)Z�2��Q}�O�-�}����!���I;��+�9U�Lp|K�
2
- %fí� ����D�t�Z�p�e(�ީr�L�]���呔�os�1��E{]Ld�΅*�D�b�L�6̹�d��p�^1�!?+|boÈ�c ]��>#n��3���lQ5!�.�h���"�!���!�4(!�zj�$mH'`q�1�N4Z���uw�@��7[s2{�p)\XMm��$W�֑�e>��� ���d�P �x(UI�I����\��2��c����W�9�b5�}_���*cD�c�@F*�q?K
1
+ ��ã?_���۶5Πu#=��i;��w �7�����K׮<�`I����0������$*)Jv�KƩ p|#��2��Z�d��2�Tlӆ�H��*�#ݠ�m�B�&�+��V Jx��;Zo��N
2
+ 'j|�6L�dSF��A}���SJQJ���U�ӻ�q��UB�ʕ-��Z{]�q���?0HG��ʕ#�T���ty��ޙB7�ѻ���oہo 9`��c��Mچ
3
+ ']fP�E����
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: 10.1.0
4
+ version: 11.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -10,32 +10,32 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIEZDCCAsygAwIBAgIBATANBgkqhkiG9w0BAQsFADA8MQwwCgYDVQQDDAN5b3Ux
14
- FzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMRMwEQYKCZImiZPyLGQBGRYDY29tMB4X
15
- DTIzMDMyMjE1NTAzNloXDTI1MDMyMTE1NTAzNlowPDEMMAoGA1UEAwwDeW91MRcw
16
- FQYKCZImiZPyLGQBGRYHZXhhbXBsZTETMBEGCgmSJomT8ixkARkWA2NvbTCCAaIw
17
- DQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMD1xmCyBRDIgMr9h+bXYgckAJwj
18
- EE8d49cWc4IgxXLEz7E/r3+DVWfbviErgQEjqZztso/5jormLpS2LC3VNjRXWdSN
19
- 3QoD51J3/OnAsW340sXTVvj5M9KD5ZkDo+QIoQO1Dp8QZKI5Ney8gTUxCj5857sX
20
- XqWmBjgOK3lFnPOMWRtbVaBh7059eiCu3+LYhVgBgMgcTtYSCluHffzAVt9j8lAE
21
- NwCxK8TSZqIQVBQOZgvCqiciKa1cwBGrKgCSdpZdt9gj9WmawQXMmeep2fFOQ8Fi
22
- 7Y6LWtUfVVvzIKL1BqEyCGH5/Gh0ll/ONPMc4YTXsDs+dQEL+FanoqlUmtH7cpvB
23
- VGeXQZu6SeDx/QqvjXYUcrWC34tsiyZS2iC4zsTdtLsi2fwjtvvsO/6Mx9l9BoQ2
24
- yM2jWGB/dMijDEmrvIWDDd5+pDCpZwOwp+6OuhSBIyT780z8hwSpQUH8C89AJAK0
25
- k0HK4ULXbJOQEQz0RVfvwcJXBxR9g2J0u/VAGQIDAQABo3EwbzAJBgNVHRMEAjAA
26
- MAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUynDeWx+yghZzQ73QtK3reacuXSEwGgYD
27
- VR0RBBMwEYEPeW91QGV4YW1wbGUuY29tMBoGA1UdEgQTMBGBD3lvdUBleGFtcGxl
28
- LmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAPJeQGa0T03CxyhFLeBLeKNRA3JMCJWwS
29
- 4EHmMNOkVFyCo4FCGFunKFUE0HucA8NEaolQ1t+8SSfvfXE5+7kpxdPDHjAr2zFy
30
- 3+I33zGhRhhFlcJRQ6QH7WFYJvMrjMDhSbU3JDHLIrL2kmzkmRJ2GST+E1ztAbaO
31
- OvrW8J5Eab5nJdADcZZaEc7RfGfyl1eGoJt6cho71GMyTfXk2aGfk2XZAJ5JI1G/
32
- rbfQGPsune5CPTnY3a0VPK7f6s07WvZ9XWfJ7MgRcAcXCIg6xC1SYk9B6hi3swIQ
33
- Pp4POByvlvVl9HbcmCaEO1IGE1cQLLz6gxDFyFIrDwbimNibwb3JW4x8X0wIQMf+
34
- W3TjRZkQUZvoB8gKv8Y/CtDZvBjB5joEgEq5JxbOS4v1AKt0EydIB78S5cGNlgml
35
- 2rAoRKxft/8MhVs5yHlkqOf+JFFGYnvXVMtXfAKw8Sp4CamkVQmlULd2d2GKQHap
36
- 9xhcE6ZO5JU1gPGPIxJ383ce1NoNTP7e
13
+ MIIEeDCCAuCgAwIBAgIBATANBgkqhkiG9w0BAQsFADBBMQ8wDQYDVQQDDAZicm9v
14
+ a2UxGjAYBgoJkiaJk/IsZAEZFgphbGNoZW1pc3RzMRIwEAYKCZImiZPyLGQBGRYC
15
+ aW8wHhcNMjMwMzIyMTYxNDQxWhcNMjUwMzIxMTYxNDQxWjBBMQ8wDQYDVQQDDAZi
16
+ cm9va2UxGjAYBgoJkiaJk/IsZAEZFgphbGNoZW1pc3RzMRIwEAYKCZImiZPyLGQB
17
+ GRYCaW8wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCro8tj5/E1Hg88
18
+ f4qfiwPVd2zJQHvdYt4GHVvuHRRgx4HGhJuNp+4BId08RBn7V6V1MW6MY3kezRBs
19
+ M+7QOQ4b1xNLTvY7FYQB1wGK5a4x7TTokDrPYQxDB2jmsdDYCzVbIMrAvUfcecRi
20
+ khyGZCdByiiCl4fKv77P12tTT+NfsvXkLt/AYCGwjOUyGKTQ01Z6eC09T27GayPH
21
+ QQvIkakyFgcJtzSyGzs8bzK5q9u7wQ12MNTjJoXzW69lqp0oNvDylu81EiSUb5S6
22
+ QzzPxZBiRB1sgtbt1gUbVI262ZDq1gR+HxPFmp+Cgt7ZLIJZAtesQvtcMzseXpfn
23
+ hpmm0Sw22KGhRAy/mqHBRhDl5HqS1SJp2Ko3lcnpXeFResp0HNlt8NSu13vhC08j
24
+ GUHU9MyIXbFOsnp3K3ADrAVjPWop8EZkmUR3MV/CUm00w2cZHCSGiXl1KMpiVKvk
25
+ Ywr1gd2ZME4QLSo+EXUtLxDUa/W3xnBS8dBOuMMz02FPWYr3PN8CAwEAAaN7MHkw
26
+ CQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFAFgmv0tYMZnItuPycSM
27
+ F5wykJEVMB8GA1UdEQQYMBaBFGJyb29rZUBhbGNoZW1pc3RzLmlvMB8GA1UdEgQY
28
+ MBaBFGJyb29rZUBhbGNoZW1pc3RzLmlvMA0GCSqGSIb3DQEBCwUAA4IBgQAX+EGY
29
+ 9RLYGxF1VLZz+G1ACQc4uyrCB6kXwI06kzUa5dF9tPXqTX9ffnz3/W8ck2IQhKzu
30
+ MKO2FVijzbDWTsZeZGglS4E+4Jxpau1lU9HhOIcKolv6LeC6UdALTFudY+GLb8Xw
31
+ REXgaJkjzzhkUSILmEnRwEbY08dVSl7ZAaxVI679vfI2yapLlIwpbBgmQTiTvPr3
32
+ qyyLUno9flYEOv9fmGHunSrM+gE0/0niGTXa5GgXBXYGS2he4LQGgSBfGp/cTwMU
33
+ rDKJRcusZ12lNBeDfgqACz/BBJF8FLodgk6rGMRZz7+ZmjjHEmpG5bQpR6Q2BuWL
34
+ XMtYk/QzaWuhiR7pWjiF8jbdd7RO6or0ohq7iFkokz/5xrtQ/vPzU2RQ3Qc6YaKw
35
+ 3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
36
+ gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
37
37
  -----END CERTIFICATE-----
38
- date: 2023-03-22 00:00:00.000000000 Z
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.9
93
+ rubygems_version: 3.4.14
94
94
  signing_key:
95
95
  specification_version: 4
96
- summary: A collection of refinements to core Ruby objects.
96
+ summary: A collection of core Ruby object refinements.
97
97
  test_files: []
metadata.gz.sig CHANGED
Binary file