refinements 9.0.2 → 9.1.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 +133 -66
- data/lib/refinements/arrays.rb +4 -0
- data/lib/refinements/hashes.rb +4 -0
- data/lib/refinements/identity.rb +1 -1
- data/lib/refinements/pathnames.rb +5 -1
- data/lib/refinements/shared/enumerables/many.rb +17 -0
- data/lib/refinements/strings.rb +1 -2
- data/lib/refinements/structs.rb +9 -2
- data.tar.gz.sig +0 -0
- metadata +4 -3
- 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: 4d3e2ba6964cfd39388a7f055fa830a5654ee264d04b2f519c1a735b922c08a7
|
4
|
+
data.tar.gz: f711604bba6cd3809398a5a2f6cb0ec867851538e58355c403a2b26aac4d75e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a72da7caf3a0698ae29bce0c51e3ce66829c41ac471e90a0f8777dc0f2e587c79304daf5ffb98983bf6ac50c79afb621d570216e557e550d0771208a039a52ed
|
7
|
+
data.tar.gz: ad031fb50b8d0c747d69b856d6e3a41eea74ba7de959bb8bfeda6b17c5b866ef2480fadce96ba50baa9b66c8e2fa6469d82e0a115cfa09a0d645668c2b3a0ef3
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -183,6 +183,19 @@ Inserts additional elements or array between all members of given array.
|
|
183
183
|
[1, 2, 3].intersperse %i[a b c] # [1, :a, :b, :c, 2, :a, :b, :c, 3]
|
184
184
|
----
|
185
185
|
|
186
|
+
===== #many?
|
187
|
+
|
188
|
+
Answers true if an array has more than one element. Can take a block which evaluates as truthy or
|
189
|
+
falsey.
|
190
|
+
|
191
|
+
[source,ruby]
|
192
|
+
----
|
193
|
+
[1, 2].many? # true
|
194
|
+
[1, 2, 3].many?(&:odd?) # true
|
195
|
+
[1].many? # false
|
196
|
+
[].many? # false
|
197
|
+
----
|
198
|
+
|
186
199
|
===== #maximum
|
187
200
|
|
188
201
|
Answers the maximum extracted value from a collection of objects.
|
@@ -436,6 +449,19 @@ example.flatten_keys! # {a_b: 1}
|
|
436
449
|
example # {a_b: 1}
|
437
450
|
----
|
438
451
|
|
452
|
+
===== #many?
|
453
|
+
|
454
|
+
Answers true if a hash has more than one element. Can take a block which evaluates as truthy or
|
455
|
+
falsey.
|
456
|
+
|
457
|
+
[source,ruby]
|
458
|
+
----
|
459
|
+
{a: 1, b: 2}.many? # true
|
460
|
+
{a: 1, b: 2, c: 2}.many? { |_key, value| value == 2 } # true
|
461
|
+
{a: 1}.many? # false
|
462
|
+
{}.many? # false
|
463
|
+
----
|
464
|
+
|
439
465
|
===== #recurse
|
440
466
|
|
441
467
|
Recursively iterates over the hash and any hash value by applying the given block to it. Does not
|
@@ -694,6 +720,28 @@ Pathname("/example.txt").touch.delete # Pathname("/example")
|
|
694
720
|
Pathname("/example.txt").delete # Errno::ENOENT
|
695
721
|
----
|
696
722
|
|
723
|
+
===== #delete_prefix
|
724
|
+
|
725
|
+
Deletes a path prefix and answers new pathname.
|
726
|
+
|
727
|
+
[source,ruby]
|
728
|
+
----
|
729
|
+
Pathname("a/path/example-test.rb").delete_prefix("example-") # Pathname("a/path/test.rb")
|
730
|
+
Pathname("example-test.rb").delete_prefix("example-") # Pathname("test.rb")
|
731
|
+
Pathname("example-test.rb").delete_prefix("miss") # Pathname("example-test.rb")
|
732
|
+
----
|
733
|
+
|
734
|
+
===== #delete_suffix
|
735
|
+
|
736
|
+
Deletes a path suffix and answers new pathname.
|
737
|
+
|
738
|
+
[source,ruby]
|
739
|
+
----
|
740
|
+
Pathname("a/path/test-example.rb").delete_suffix("-example") # Pathname("a/path/test.rb")
|
741
|
+
Pathname("test-example.rb").delete_suffix("-example") # Pathname("test.rb")
|
742
|
+
Pathname("test-example.rb").delete_suffix("miss") # Pathname("test-example.rb")
|
743
|
+
----
|
744
|
+
|
697
745
|
===== #directories
|
698
746
|
|
699
747
|
Answers all directories or filtered directories for current path.
|
@@ -1055,14 +1103,14 @@ whether the struct was constructed with positional or keyword arguments.
|
|
1055
1103
|
[source,ruby]
|
1056
1104
|
----
|
1057
1105
|
Example = Struct.new :a, :b, :c
|
1058
|
-
Example.with_keywords a: 1, b: 2, c: 3 #
|
1059
|
-
Example.with_keywords a: 1 #
|
1060
|
-
Example.with_keywords c: 1 #
|
1106
|
+
Example.with_keywords a: 1, b: 2, c: 3 # #<struct a=1, b=2, c=3>
|
1107
|
+
Example.with_keywords a: 1 # #<struct a=1, b=nil, c=nil>
|
1108
|
+
Example.with_keywords c: 1 # #<struct a=nil, b=nil, c=1>
|
1061
1109
|
|
1062
1110
|
Example = Struct.new :a, :b, :c, keyword_init: true
|
1063
|
-
Example.with_keywords a: 1, b: 2, c: 3 #
|
1064
|
-
Example.with_keywords a: 1 #
|
1065
|
-
Example.with_keywords c: 1 #
|
1111
|
+
Example.with_keywords a: 1, b: 2, c: 3 # #<struct a=1, b=2, c=3>
|
1112
|
+
Example.with_keywords a: 1 # #<struct a=1, b=nil, c=nil>
|
1113
|
+
Example.with_keywords c: 1 # #<struct a=nil, b=nil, c=1>
|
1066
1114
|
----
|
1067
1115
|
|
1068
1116
|
===== .with_positions
|
@@ -1073,106 +1121,125 @@ whether the struct was constructed with positional or keyword arguments.
|
|
1073
1121
|
[source,ruby]
|
1074
1122
|
----
|
1075
1123
|
Example = Struct.new :a, :b, :c
|
1076
|
-
Example.with_positions 1, 2, 3 #
|
1077
|
-
Example.with_positions 1 #
|
1124
|
+
Example.with_positions 1, 2, 3 # #<struct a=1, b=2, c=3>
|
1125
|
+
Example.with_positions 1 # #<struct a=1, b=nil, c=nil>
|
1078
1126
|
|
1079
1127
|
Example = Struct.new :a, :b, :c, keyword_init: true
|
1080
|
-
Example.with_positions 1, 2, 3 #
|
1081
|
-
Example.with_positions 1 #
|
1128
|
+
Example.with_positions 1, 2, 3 # #<struct a=1, b=2, c=3>
|
1129
|
+
Example.with_positions 1 # #<struct a=1, b=nil, c=nil>
|
1082
1130
|
----
|
1083
1131
|
|
1084
1132
|
===== #merge
|
1085
1133
|
|
1086
1134
|
Merges multiple attributes without mutating itself and supports any object that responds to `#to_h`.
|
1135
|
+
Works regardless of whether the struct is constructed with positional or keyword arguments.
|
1087
1136
|
|
1088
1137
|
[source,ruby]
|
1089
1138
|
----
|
1139
|
+
example = Struct.new("Example", :a, :b, :c).new 1, 2, 3
|
1090
1140
|
other = Struct.new("Other", :a, :b, :c).new 7, 8, 9
|
1091
1141
|
|
1092
|
-
example
|
1093
|
-
example.merge a: 10
|
1094
|
-
example.merge a: 10, c: 30
|
1095
|
-
example.merge
|
1096
|
-
example
|
1097
|
-
example.merge other # "#<struct a=7, b=8, c=9>"
|
1098
|
-
example # "#<struct a=1, b=2, c=3>"
|
1099
|
-
|
1100
|
-
example = Struct.new(:a, :b, :c, keyword_init: true).new a: 1, b: 2, c: 3
|
1101
|
-
example.merge a: 10 # "#<struct a=10, b=2, c=3>"
|
1102
|
-
example.merge a: 10, c: 30 # "#<struct a=10, b=2, c=30>"
|
1103
|
-
example.merge {a: 10, b: 20} # "#<struct a=10, b=20, c=3>"
|
1104
|
-
example.merge other # "#<struct a=7, b=8, c=9>"
|
1105
|
-
example.merge a: 10, b: 20, c: 30 # "#<struct a=10, b=20, c=30>"
|
1106
|
-
example # "#<struct a=1, b=2, c=3>"
|
1142
|
+
example.merge a: 10 # #<struct Struct::Example a=10, b=2, c=3>
|
1143
|
+
example.merge a: 10, c: 30 # #<struct Struct::Example a=10, b=2, c=30>
|
1144
|
+
example.merge a: 10, b: 20, c: 30 # #<struct Struct::Example a=10, b=20, c=30>
|
1145
|
+
example.merge other # #<struct Struct::Example a=7, b=8, c=9>
|
1146
|
+
example # #<struct Struct::Example a=1, b=2, c=3>
|
1107
1147
|
----
|
1108
1148
|
|
1109
1149
|
===== #merge!
|
1110
1150
|
|
1111
1151
|
Merges multiple attributes while mutating itself and supports any object that responds to `#to_h`.
|
1152
|
+
Works regardless of whether the struct is constructed with positional or keyword arguments.
|
1112
1153
|
|
1113
1154
|
[source,ruby]
|
1114
1155
|
----
|
1156
|
+
example = Struct.new("Example", :a, :b, :c).new 1, 2, 3
|
1115
1157
|
other = Struct.new("Other", :a, :b, :c).new 7, 8, 9
|
1116
1158
|
|
1117
|
-
example
|
1118
|
-
example.merge! a: 10
|
1119
|
-
example.merge!
|
1120
|
-
example.merge!
|
1121
|
-
example
|
1122
|
-
example.merge! a: 10, b: 20, c: 30 # "#<struct a=10, b=20, c=30>"
|
1123
|
-
example # "#<struct a=10, b=20, c=30>"
|
1124
|
-
|
1125
|
-
example = Struct.new(:a, :b, :c, keyword_init: true).new a: 1, b: 2, c: 3
|
1126
|
-
example.merge! a: 10 # "#<struct a=10, b=2, c=3>"
|
1127
|
-
example.merge! a: 10, c: 30 # "#<struct a=10, b=2, c=30>"
|
1128
|
-
example.merge! {a: 10, b: 20} # "#<struct a=10, b=20, c=3>"
|
1129
|
-
example.merge! other # "#<struct a=7, b=8, c=9>"
|
1130
|
-
example.merge! a: 10, b: 20, c: 30 # "#<struct a=10, b=20, c=30>"
|
1131
|
-
example # "#<struct a=10, b=20, c=30>"
|
1159
|
+
example.merge! a: 10 # #<struct Struct::Example a=10, b=2, c=3>
|
1160
|
+
example.merge! a: 10, c: 30 # #<struct Struct::Example a=10, b=2, c=30>
|
1161
|
+
example.merge! other # #<struct Struct::Example a=7, b=8, c=9>
|
1162
|
+
example.merge! a: 10, b: 20, c: 30 # #<struct Struct::Example a=10, b=20, c=30>
|
1163
|
+
example # #<struct Struct::Example a=10, b=20, c=30>
|
1132
1164
|
----
|
1133
1165
|
|
1134
1166
|
===== #revalue
|
1135
1167
|
|
1136
|
-
Transforms values without mutating itself. An optional hash can be supplied to
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1168
|
+
Transforms values without mutating itself. An optional hash can be supplied to target specific
|
1169
|
+
attributes. In the event that a block isn't supplied, the struct will answer itself since there is
|
1170
|
+
nothing to operate on. Behavior is the same regardless of whether the struct is constructed using
|
1171
|
+
positional or keyword arguments. Works regardless of whether the struct is constructed with
|
1172
|
+
positional or keyword arguments.
|
1141
1173
|
|
1142
1174
|
[source,ruby]
|
1143
1175
|
----
|
1144
1176
|
example = Struct.new("Example", :a, :b, :c).new 1, 2, 3
|
1145
|
-
|
1146
|
-
example.revalue
|
1147
|
-
example.revalue
|
1148
|
-
example.revalue
|
1149
|
-
example
|
1177
|
+
|
1178
|
+
example.revalue { |value| value * 2 } # #<struct Struct::Example a=2, b=4, c=6>
|
1179
|
+
example.revalue(c: 2) { |previous, current| previous + current } # #<struct Struct::Example a=1, b=2, c=5>
|
1180
|
+
example.revalue c: 2 # #<struct Struct::Example a=1, b=2, c=3>
|
1181
|
+
example.revalue # #<struct Struct::Example a=1, b=2, c=3>
|
1182
|
+
example # #<struct Struct::Example a=1, b=2, c=3>
|
1150
1183
|
----
|
1151
1184
|
|
1152
1185
|
===== #revalue!
|
1153
1186
|
|
1154
|
-
Transforms values while mutating itself. An optional hash can be supplied to
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1187
|
+
Transforms values while mutating itself. An optional hash can be supplied to target specific
|
1188
|
+
attributes. In the event that a block isn't supplied, the struct will answer itself since there is
|
1189
|
+
nothing to operate on. Behavior is the same regardless of whether the struct is constructed using
|
1190
|
+
positional or keyword arguments. Works regardless of whether the struct is constructed with
|
1191
|
+
positional or keyword arguments.
|
1159
1192
|
|
1160
1193
|
[source,ruby]
|
1161
1194
|
----
|
1162
|
-
|
1195
|
+
one = Struct.new("One", :a, :b, :c).new 1, 2, 3
|
1196
|
+
one.revalue! { |value| value * 2 } # #<struct Struct::One a=2, b=4, c=6>
|
1197
|
+
one # #<struct Struct::One a=2, b=4, c=6>
|
1198
|
+
|
1199
|
+
two = Struct.new("Two", :a, :b, :c).new 1, 2, 3
|
1200
|
+
two.revalue!(c: 2) { |previous, current| previous + current } # #<struct Struct::Two a=1, b=2, c=5>
|
1201
|
+
two # #<struct Struct::Two a=1, b=2, c=5>
|
1202
|
+
|
1203
|
+
three = Struct.new("Three", :a, :b, :c).new 1, 2, 3
|
1204
|
+
three.revalue! c: 2 # #<struct Struct::Three a=1, b=2, c=3>
|
1205
|
+
three.revalue! # #<struct Struct::Three a=1, b=2, c=3>
|
1206
|
+
three # #<struct Struct::Three a=1, b=2, c=3>
|
1207
|
+
----
|
1163
1208
|
|
1164
|
-
|
1165
|
-
example.revalue! { |value| value * 2 } # "#<struct a=2, b=4, c=6>"
|
1166
|
-
example # "#<struct a=2, b=4, c=6>"
|
1209
|
+
===== #transmute
|
1167
1210
|
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1211
|
+
Transmutes given enumerable by using the foreign key map and merging those key values into the
|
1212
|
+
current struct while not mutating itself. Works regardless of whether the struct is constructed with
|
1213
|
+
positional or keyword arguments.
|
1214
|
+
|
1215
|
+
[source,ruby]
|
1216
|
+
----
|
1217
|
+
a = Struct.new("A", :a, :b, :c).new 1, 2, 3
|
1218
|
+
b = Struct.new("B", :x, :y, :z).new 7, 8, 9
|
1219
|
+
c = {r: 10, s: 20, t: 30}
|
1220
|
+
|
1221
|
+
a.transmute b, a: :x, b: :y, c: :z # #<struct Struct::A a=7, b=8, c=9>
|
1222
|
+
a.transmute b, b: :y # #<struct Struct::A a=1, b=8, c=3>
|
1223
|
+
a.transmute c, c: :t # #<struct Struct::A a=1, b=2, c=30>
|
1224
|
+
a # #<struct Struct::A a=1, b=2, c=3>
|
1225
|
+
----
|
1226
|
+
|
1227
|
+
===== #transmute!
|
1228
|
+
|
1229
|
+
Transmutes given enumerable by using the foreign key map and merging those key values into the
|
1230
|
+
current struct while mutating itself. Works regardless of whether the struct is constructed with
|
1231
|
+
positional or keyword arguments.
|
1232
|
+
|
1233
|
+
[source,ruby]
|
1234
|
+
----
|
1235
|
+
a = Struct.new("A", :a, :b, :c).new 1, 2, 3
|
1236
|
+
b = Struct.new("B", :x, :y, :z).new 7, 8, 9
|
1237
|
+
c = {r: 10, s: 20, t: 30}
|
1171
1238
|
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1239
|
+
a.transmute! b, a: :x, b: :y, c: :z # #<struct Struct::A a=7, b=8, c=9>
|
1240
|
+
a.transmute! b, b: :y # #<struct Struct::A a=1, b=8, c=3>
|
1241
|
+
a.transmute! c, c: :t # #<struct Struct::A a=1, b=2, c=30>
|
1242
|
+
a # #<struct Struct::A a=7, b=8, c=30>
|
1176
1243
|
----
|
1177
1244
|
|
1178
1245
|
==== Symbol
|
data/lib/refinements/arrays.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "refinements/shared/enumerables/many"
|
4
|
+
|
3
5
|
module Refinements
|
4
6
|
# Provides additional enhancements to the Array primitive.
|
5
7
|
module Arrays
|
6
8
|
refine Array do
|
9
|
+
import_methods Shared::Enumerables::Many
|
10
|
+
|
7
11
|
def compress = dup.compress!
|
8
12
|
|
9
13
|
def compress!
|
data/lib/refinements/hashes.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "refinements/shared/enumerables/many"
|
4
|
+
|
3
5
|
module Refinements
|
4
6
|
# Provides additional enhancements to the Hash primitive.
|
5
7
|
module Hashes
|
@@ -12,6 +14,8 @@ module Refinements
|
|
12
14
|
end
|
13
15
|
|
14
16
|
refine Hash do
|
17
|
+
import_methods Shared::Enumerables::Many
|
18
|
+
|
15
19
|
def compress = dup.compress!
|
16
20
|
|
17
21
|
def compress!
|
data/lib/refinements/identity.rb
CHANGED
@@ -50,6 +50,10 @@ module Refinements
|
|
50
50
|
|
51
51
|
def delete = super && self
|
52
52
|
|
53
|
+
def delete_prefix(pattern) = parent.join %(#{name.sub(/\A#{pattern}/, "")}#{extname})
|
54
|
+
|
55
|
+
def delete_suffix(pattern) = parent.join %(#{name.sub(/#{pattern}\z/, "")}#{extname})
|
56
|
+
|
53
57
|
def directories pattern = "*", flag: File::FNM_SYSCASE
|
54
58
|
glob(pattern, flag).select(&:directory?).sort
|
55
59
|
end
|
@@ -74,7 +78,7 @@ module Refinements
|
|
74
78
|
self
|
75
79
|
end
|
76
80
|
|
77
|
-
def name = basename
|
81
|
+
def name = basename extname
|
78
82
|
|
79
83
|
def relative_parent(root_dir) = relative_path_from(root_dir).parent
|
80
84
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Refinements
|
4
|
+
module Shared
|
5
|
+
module Enumerables
|
6
|
+
# Provides shared functionality for knowing whether an enumerable has many elements or not.
|
7
|
+
module Many
|
8
|
+
def many?
|
9
|
+
return size > 1 unless block_given?
|
10
|
+
|
11
|
+
total = reduce(0) { |count, item| yield(item) ? count + 1 : count }
|
12
|
+
total > 1
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/refinements/strings.rb
CHANGED
@@ -64,11 +64,10 @@ module Refinements
|
|
64
64
|
|
65
65
|
private
|
66
66
|
|
67
|
-
# :reek:DuplicateMethodCall
|
68
67
|
# :reek:UtilityFunction
|
69
68
|
def combine parts, method, delimiter = ""
|
70
69
|
parts.reduce "" do |result, part|
|
71
|
-
next part.
|
70
|
+
next part.public_send method if result.empty?
|
72
71
|
|
73
72
|
"#{result}#{delimiter}#{part.__send__ method}"
|
74
73
|
end
|
data/lib/refinements/structs.rb
CHANGED
@@ -15,10 +15,10 @@ module Refinements
|
|
15
15
|
end
|
16
16
|
|
17
17
|
refine Struct do
|
18
|
-
def merge(
|
18
|
+
def merge(...) = dup.merge!(...)
|
19
19
|
|
20
20
|
def merge! object = nil
|
21
|
-
to_h.merge(**object.to_h).each { |key, value| self[key] = value }
|
21
|
+
to_h.merge!(**object.to_h).each { |key, value| self[key] = value }
|
22
22
|
self
|
23
23
|
end
|
24
24
|
|
@@ -34,6 +34,13 @@ module Refinements
|
|
34
34
|
attributes.each { |key, value| self[key] = yield self[key], value }
|
35
35
|
self
|
36
36
|
end
|
37
|
+
|
38
|
+
def transmute(...) = dup.transmute!(...)
|
39
|
+
|
40
|
+
def transmute! object, **key_map
|
41
|
+
mapping = key_map.invert
|
42
|
+
merge! object.to_h.slice(*mapping.keys).transform_keys!(mapping)
|
43
|
+
end
|
37
44
|
end
|
38
45
|
end
|
39
46
|
end
|
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: 9.0
|
4
|
+
version: 9.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
@@ -28,7 +28,7 @@ cert_chain:
|
|
28
28
|
lkHilIrX69jq8wMPpBhlaw2mRmeSL50Wv5u6xVBvOHhXFSP1crXM95vfLhLyRYod
|
29
29
|
W2A=
|
30
30
|
-----END CERTIFICATE-----
|
31
|
-
date: 2022-01-
|
31
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
32
32
|
dependencies: []
|
33
33
|
description:
|
34
34
|
email:
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/refinements/identity.rb
|
50
50
|
- lib/refinements/ios.rb
|
51
51
|
- lib/refinements/pathnames.rb
|
52
|
+
- lib/refinements/shared/enumerables/many.rb
|
52
53
|
- lib/refinements/string_ios.rb
|
53
54
|
- lib/refinements/strings.rb
|
54
55
|
- lib/refinements/structs.rb
|
@@ -77,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
78
|
- !ruby/object:Gem::Version
|
78
79
|
version: '0'
|
79
80
|
requirements: []
|
80
|
-
rubygems_version: 3.3.
|
81
|
+
rubygems_version: 3.3.5
|
81
82
|
signing_key:
|
82
83
|
specification_version: 4
|
83
84
|
summary: A collection of refinements to core Ruby objects.
|
metadata.gz.sig
CHANGED
Binary file
|