refinements 7.17.0 → 7.18.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.tar.gz.sig +0 -0
- data/README.adoc +103 -0
- data/lib/refinements/arrays.rb +4 -0
- data/lib/refinements/identity.rb +1 -1
- data/lib/refinements/structs.rb +29 -0
- metadata +3 -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: 5dd9bd6cbc9800c0c66d8c1ae4ed93124143f196a4173723438bb7d9fc12957e
|
4
|
+
data.tar.gz: 9d6651c258900528aa68db2a8b26e1bd77aef9be70fe3fbeadf63e4c0580ab45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bad8de30ca4c07607013a08d8346d1390b3f6223b943588ac94ce1c7e44fb5f59ebb634c9adb4d0f1773929ede430ffc7025fa9e6fcdca6f055d3bfa4c5cbeb8
|
7
|
+
data.tar.gz: d81030c3b1a8db17fff6cafea12496041d2cb95e87452cf932c7cf03c60dea4971f1bbce59c30fde5b5a8d80f713b5a00fca1cbcbba6bbb1962f77e21984f9b0
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -171,6 +171,18 @@ Answers mean/average all elements within an array.
|
|
171
171
|
[1.25, 1.5, 1.75].mean # => 1.5
|
172
172
|
----
|
173
173
|
|
174
|
+
===== #pad
|
175
|
+
|
176
|
+
Answers new array padded with given value up to a maximum size. Useful in situations where an array
|
177
|
+
needs to be a specific size with padded values.
|
178
|
+
|
179
|
+
[source,ruby]
|
180
|
+
----
|
181
|
+
[1].pad 0 # => [1]
|
182
|
+
[1].pad 0, max: 3 # => [1, 0, 0]
|
183
|
+
[1, 2].pad 3, max: 3 # => [1, 2, 3]
|
184
|
+
----
|
185
|
+
|
174
186
|
===== #ring
|
175
187
|
|
176
188
|
Answers a circular array which can enumerate before, current, after elements.
|
@@ -924,6 +936,50 @@ buffer # => "This is a test."
|
|
924
936
|
|
925
937
|
==== Struct
|
926
938
|
|
939
|
+
===== .keyworded?
|
940
|
+
|
941
|
+
Answers whether a struct was constructed with keyword or positional arguments.
|
942
|
+
|
943
|
+
[source,ruby]
|
944
|
+
----
|
945
|
+
Struct.new(:a, keyword_init: true).keyworded? # => true
|
946
|
+
Struct.new(:a).keyworded? # => false
|
947
|
+
----
|
948
|
+
|
949
|
+
===== .with_keywords
|
950
|
+
|
951
|
+
Answers a struct instance with given keyword arguments regardless of
|
952
|
+
whether the struct was constructed with positional or keyword arguments.
|
953
|
+
|
954
|
+
[source,ruby]
|
955
|
+
----
|
956
|
+
Example = Struct.new :a, :b, :c
|
957
|
+
Example.with_keywords a: 1, b: 2, c: 3 # => #<struct a=1, b=2, c=3>
|
958
|
+
Example.with_keywords a: 1 # => #<struct a=1, b=nil, c=nil>
|
959
|
+
Example.with_keywords c: 1 # => #<struct a=nil, b=nil, c=1>
|
960
|
+
|
961
|
+
Example = Struct.new :a, :b, :c, keyword_init: true
|
962
|
+
Example.with_keywords a: 1, b: 2, c: 3 # => #<struct a=1, b=2, c=3>
|
963
|
+
Example.with_keywords a: 1 # => #<struct a=1, b=nil, c=nil>
|
964
|
+
Example.with_keywords c: 1 # => #<struct a=nil, b=nil, c=1>
|
965
|
+
----
|
966
|
+
|
967
|
+
===== .with_positions
|
968
|
+
|
969
|
+
Answers a struct instance with given positional arguments regardless of
|
970
|
+
whether the struct was constructed with positional or keyword arguments.
|
971
|
+
|
972
|
+
[source,ruby]
|
973
|
+
----
|
974
|
+
Example = Struct.new :a, :b, :c
|
975
|
+
Example.with_positions 1, 2, 3 # => #<struct a=1, b=2, c=3>
|
976
|
+
Example.with_positions 1 # => #<struct a=1, b=nil, c=nil>
|
977
|
+
|
978
|
+
Example = Struct.new :a, :b, :c, keyword_init: true
|
979
|
+
Example.with_positions 1, 2, 3 # => #<struct a=1, b=2, c=3>
|
980
|
+
Example.with_positions 1 # => #<struct a=1, b=nil, c=nil>
|
981
|
+
----
|
982
|
+
|
927
983
|
===== #merge
|
928
984
|
|
929
985
|
Merges multiple attributes without mutating itself.
|
@@ -966,6 +1022,53 @@ example.merge! a: 10, b: 20, c: 30 # => #<struct a=10, b=20, c=30>
|
|
966
1022
|
example # => #<struct a=10, b=20, c=30>
|
967
1023
|
----
|
968
1024
|
|
1025
|
+
===== #revalue
|
1026
|
+
|
1027
|
+
Transforms values without mutating itself. An optional hash can be supplied to pinpoint and
|
1028
|
+
transform specific attributes. In the event that a block isn't supplied, the struct will answer
|
1029
|
+
itself since there is nothing to operate on. Behavior is the same regardless of whether the struct
|
1030
|
+
is constructed using positional or keyword arguments. A positional struct is used in the examples
|
1031
|
+
below but a keyword struct would work too.
|
1032
|
+
|
1033
|
+
[source,ruby]
|
1034
|
+
----
|
1035
|
+
Example = Struct.new :a, :b, :c
|
1036
|
+
|
1037
|
+
example = Example[1, 2, 3]
|
1038
|
+
example.revalue { |value| value * 2 } # => #<struct a=2, b=4, c=6>
|
1039
|
+
example.revalue(c: 2) { |previous, current| previous + current } # => #<struct a=1, b=2, c=5>
|
1040
|
+
example.revalue c: 2 # => #<struct a=1, b=2, c=3>
|
1041
|
+
example.revalue # => #<struct a=1, b=2, c=3>
|
1042
|
+
example # => #<struct a=1, b=2, c=3>
|
1043
|
+
|
1044
|
+
----
|
1045
|
+
|
1046
|
+
===== #revalue!
|
1047
|
+
|
1048
|
+
Transforms values while mutating itself. An optional hash can be supplied to pinpoint and transform
|
1049
|
+
specific attributes. In the event that a block isn't supplied, the struct will answer itself since
|
1050
|
+
there is nothing to operate on. Behavior is the same regardless of whether the struct is constructed
|
1051
|
+
using positional or keyword arguments. A positional struct is used in the examples below but a
|
1052
|
+
keyword struct would work too.
|
1053
|
+
|
1054
|
+
[source,ruby]
|
1055
|
+
----
|
1056
|
+
Example = Struct.new :a, :b, :c
|
1057
|
+
|
1058
|
+
example = Example[1, 2, 3]
|
1059
|
+
example.revalue! { |value| value * 2 } # => #<struct a=2, b=4, c=6>
|
1060
|
+
example # => #<struct a=2, b=4, c=6>
|
1061
|
+
|
1062
|
+
example = Example[1, 2, 3]
|
1063
|
+
example.revalue!(c: 2) { |previous, current| previous + current } # => #<struct a=1, b=2, c=5>
|
1064
|
+
example # => #<struct a=1, b=2, c=5>
|
1065
|
+
|
1066
|
+
example = Example[1, 2, 3]
|
1067
|
+
example.revalue! c: 2 # => #<struct a=1, b=2, c=3>
|
1068
|
+
example.revalue! # => #<struct a=1, b=2, c=3>
|
1069
|
+
example # => #<struct a=1, b=2, c=3>
|
1070
|
+
----
|
1071
|
+
|
969
1072
|
== Development
|
970
1073
|
|
971
1074
|
To contribute, run:
|
data/lib/refinements/arrays.rb
CHANGED
data/lib/refinements/identity.rb
CHANGED
data/lib/refinements/structs.rb
CHANGED
@@ -2,6 +2,20 @@
|
|
2
2
|
|
3
3
|
module Refinements
|
4
4
|
module Structs
|
5
|
+
refine Struct.singleton_class do
|
6
|
+
def keyworded?
|
7
|
+
inspect.include? "keyword_init: true"
|
8
|
+
end
|
9
|
+
|
10
|
+
def with_keywords arguments
|
11
|
+
keyworded? ? new(arguments) : new.merge!(arguments)
|
12
|
+
end
|
13
|
+
|
14
|
+
def with_positions *values
|
15
|
+
keyworded? ? new(Hash[members.zip values]) : new(*values)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
5
19
|
refine Struct do
|
6
20
|
def merge **attributes
|
7
21
|
dup.merge! attributes
|
@@ -11,6 +25,21 @@ module Refinements
|
|
11
25
|
to_h.merge(attributes).each { |key, value| self[key] = value }
|
12
26
|
self
|
13
27
|
end
|
28
|
+
|
29
|
+
def revalue attributes = each_pair
|
30
|
+
return self unless block_given?
|
31
|
+
|
32
|
+
dup.tap do |copy|
|
33
|
+
attributes.each { |key, value| copy[key] = yield self[key], value }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def revalue! attributes = each_pair
|
38
|
+
return self unless block_given?
|
39
|
+
|
40
|
+
attributes.each { |key, value| self[key] = yield self[key], value }
|
41
|
+
self
|
42
|
+
end
|
14
43
|
end
|
15
44
|
end
|
16
45
|
end
|
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: 7.
|
4
|
+
version: 7.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
@@ -28,7 +28,7 @@ cert_chain:
|
|
28
28
|
2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
|
29
29
|
QWc=
|
30
30
|
-----END CERTIFICATE-----
|
31
|
-
date: 2020-12-
|
31
|
+
date: 2020-12-21 00:00:00.000000000 Z
|
32
32
|
dependencies: []
|
33
33
|
description:
|
34
34
|
email:
|
@@ -76,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
requirements: []
|
79
|
-
rubygems_version: 3.2.
|
79
|
+
rubygems_version: 3.2.2
|
80
80
|
signing_key:
|
81
81
|
specification_version: 4
|
82
82
|
summary: A collection of refinements to core Ruby objects.
|
metadata.gz.sig
CHANGED
Binary file
|