refinements 8.0.1 → 8.2.1
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 +2 -2
- data.tar.gz.sig +0 -0
- data/README.adoc +43 -0
- data/lib/refinements/arrays.rb +14 -24
- data/lib/refinements/big_decimals.rb +1 -3
- data/lib/refinements/date_times.rb +1 -3
- data/lib/refinements/hashes.rb +10 -30
- data/lib/refinements/identity.rb +1 -1
- data/lib/refinements/ios.rb +2 -6
- data/lib/refinements/pathnames.rb +11 -36
- data/lib/refinements/string_ios.rb +1 -3
- data/lib/refinements/strings.rb +2 -6
- data/lib/refinements/structs.rb +5 -15
- metadata +13 -13
- 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: 3357c002920480a640ec080da0e8744f04a0883fa5ec54b75a88b77f7d2101d6
|
4
|
+
data.tar.gz: f7bd7990e5f362ec9b08e06f42beca263bff1c78be5a68d834cf7dc4fe58e961
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 968fc32529ba33a2833b814d722e38e0a5caffcfc3eba154528838a75469a0701847e3a9419d395d632a4c47cf52d927420e95558b90e0cb1b0868066ee99cd9
|
7
|
+
data.tar.gz: 3839e9d117a58251fd9304ad628a76aab0f22f7210542633e2e2fdc13abe38b38c25a126c111430f0c454bf29b5cc6c0b2a94d9473ed6caa59396dedeca8c2ba
|
checksums.yaml.gz.sig
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Vm�T7�:�UlVCȡ�]��0*���8�Omr�;��V�HR�Y'������ma͒X����O1���KW%��2U����0$�ٗ>[.T,F�@랉\��[&2ѯ�ƞ��r�X�˅(�O#7d�r#��g��0aJ��1�yK1�bbV��N���sG��
|
2
|
+
m��
|
data.tar.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -135,6 +135,23 @@ Removes given array or elements without mutating itself.
|
|
135
135
|
[1, 2, 3, 4, 5].excluding 4, 5 # => [1, 2, 3]
|
136
136
|
----
|
137
137
|
|
138
|
+
===== #filter_find
|
139
|
+
|
140
|
+
Answers the first truthy and filtered result from a collection.
|
141
|
+
|
142
|
+
[source,ruby]
|
143
|
+
----
|
144
|
+
handlers = [
|
145
|
+
->(object) { object if object == :b },
|
146
|
+
proc { false },
|
147
|
+
->(object) { object if object == :a }
|
148
|
+
]
|
149
|
+
|
150
|
+
handlers.filter_find # => Enumerator::Lazy
|
151
|
+
handlers.filter_find { |handler| handler.call :a } # => :a
|
152
|
+
handlers.filter_find { |handler| handler.call :x } # => nil
|
153
|
+
----
|
154
|
+
|
138
155
|
===== #including
|
139
156
|
|
140
157
|
Adds given array or elements without mutating itself.
|
@@ -156,6 +173,19 @@ Inserts additional elements or array between all members of given array.
|
|
156
173
|
[1, 2, 3].intersperse %i[a b c] # => [1, :a, :b, :c, 2, :a, :b, :c, 3]
|
157
174
|
----
|
158
175
|
|
176
|
+
===== #maximum
|
177
|
+
|
178
|
+
Answers the maximum extracted value from a collection of objects.
|
179
|
+
|
180
|
+
[source,ruby]
|
181
|
+
----
|
182
|
+
Point = Struct.new :x, :y, keyword_init: true
|
183
|
+
points = [Point[x: 1, y: 2], Point[x: 0, y: 1], Point[x: 2, y: 3]]
|
184
|
+
|
185
|
+
points.maximum(:x) # => 2
|
186
|
+
points.maximum(:y) # => 3
|
187
|
+
----
|
188
|
+
|
159
189
|
===== #mean
|
160
190
|
|
161
191
|
Answers mean/average all elements within an array.
|
@@ -168,6 +198,19 @@ Answers mean/average all elements within an array.
|
|
168
198
|
[1.25, 1.5, 1.75].mean # => 1.5
|
169
199
|
----
|
170
200
|
|
201
|
+
===== #minimum
|
202
|
+
|
203
|
+
Answers the minimum extracted value from a collection of objects.
|
204
|
+
|
205
|
+
[source,ruby]
|
206
|
+
----
|
207
|
+
Point = Struct.new :x, :y, keyword_init: true
|
208
|
+
points = [Point[x: 1, y: 2], Point[x: 0, y: 1], Point[x: 2, y: 3]]
|
209
|
+
|
210
|
+
points.minimum(:x) # => 0
|
211
|
+
points.minimum(:y) # => 1
|
212
|
+
----
|
213
|
+
|
171
214
|
===== #pad
|
172
215
|
|
173
216
|
Answers new array padded with given value up to a maximum size. Useful in situations where an array
|
data/lib/refinements/arrays.rb
CHANGED
@@ -3,37 +3,27 @@
|
|
3
3
|
module Refinements
|
4
4
|
module Arrays
|
5
5
|
refine Array do
|
6
|
-
def compress
|
7
|
-
compact.reject(&:empty?)
|
8
|
-
end
|
6
|
+
def compress = compact.reject(&:empty?)
|
9
7
|
|
10
|
-
def compress!
|
11
|
-
replace compress
|
12
|
-
end
|
8
|
+
def compress! = replace(compress)
|
13
9
|
|
14
|
-
def excluding
|
15
|
-
self - elements.flatten
|
16
|
-
end
|
10
|
+
def excluding(*elements) = self - elements.flatten
|
17
11
|
|
18
|
-
def
|
19
|
-
self + elements.flatten
|
20
|
-
end
|
12
|
+
def filter_find(&block) = block ? lazy.map(&block).find(&:itself) : lazy
|
21
13
|
|
22
|
-
def
|
23
|
-
product([elements]).tap(&:pop).flatten.push last
|
24
|
-
end
|
14
|
+
def including(*elements) = self + elements.flatten
|
25
15
|
|
26
|
-
def
|
27
|
-
size.zero? ? 0 : sum(0) / size
|
28
|
-
end
|
16
|
+
def intersperse(*elements) = product([elements]).tap(&:pop).flatten.push(last)
|
29
17
|
|
30
|
-
def
|
31
|
-
dup.fill value, size..(max - 1)
|
32
|
-
end
|
18
|
+
def maximum(key) = map(&key).max
|
33
19
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
20
|
+
def mean = size.zero? ? 0 : sum(0.0) / size
|
21
|
+
|
22
|
+
def minimum(key) = map(&key).min
|
23
|
+
|
24
|
+
def pad(value, max: size) = dup.fill(value, size..(max - 1))
|
25
|
+
|
26
|
+
def ring(&block) = [last, *self, first].each_cons(3, &block)
|
37
27
|
end
|
38
28
|
end
|
39
29
|
end
|
@@ -5,9 +5,7 @@ require "bigdecimal"
|
|
5
5
|
module Refinements
|
6
6
|
module BigDecimals
|
7
7
|
refine BigDecimal do
|
8
|
-
def inspect
|
9
|
-
format "#<BigDecimal:%{id} %{string}>", id: object_id, string: to_s("F")
|
10
|
-
end
|
8
|
+
def inspect = format("#<BigDecimal:%{id} %{string}>", id: object_id, string: to_s("F"))
|
11
9
|
end
|
12
10
|
end
|
13
11
|
end
|
data/lib/refinements/hashes.rb
CHANGED
@@ -7,9 +7,7 @@ module Refinements
|
|
7
7
|
new { |new_hash, missing_key| new_hash[missing_key] = new(&new_hash.default_proc) }
|
8
8
|
end
|
9
9
|
|
10
|
-
def with_default value
|
11
|
-
new { |new_hash, missing_key| new_hash[missing_key] = value }
|
12
|
-
end
|
10
|
+
def with_default(value) = new { |new_hash, missing_key| new_hash[missing_key] = value }
|
13
11
|
end
|
14
12
|
|
15
13
|
refine Hash do
|
@@ -25,25 +23,15 @@ module Refinements
|
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
28
|
-
def deep_merge! other
|
29
|
-
replace deep_merge(other)
|
30
|
-
end
|
26
|
+
def deep_merge!(other) = replace(deep_merge(other))
|
31
27
|
|
32
|
-
def deep_stringify_keys
|
33
|
-
recurse(&:stringify_keys)
|
34
|
-
end
|
28
|
+
def deep_stringify_keys = recurse(&:stringify_keys)
|
35
29
|
|
36
|
-
def deep_stringify_keys!
|
37
|
-
replace deep_stringify_keys
|
38
|
-
end
|
30
|
+
def deep_stringify_keys! = replace(deep_stringify_keys)
|
39
31
|
|
40
|
-
def deep_symbolize_keys
|
41
|
-
recurse(&:symbolize_keys)
|
42
|
-
end
|
32
|
+
def deep_symbolize_keys = recurse(&:symbolize_keys)
|
43
33
|
|
44
|
-
def deep_symbolize_keys!
|
45
|
-
replace deep_symbolize_keys
|
46
|
-
end
|
34
|
+
def deep_symbolize_keys! = replace(deep_symbolize_keys)
|
47
35
|
|
48
36
|
# :reek:TooManyStatements
|
49
37
|
def flatten_keys prefix: nil, delimiter: "_", cast: :to_sym
|
@@ -74,21 +62,13 @@ module Refinements
|
|
74
62
|
end
|
75
63
|
end
|
76
64
|
|
77
|
-
def stringify_keys
|
78
|
-
reduce({}) { |hash, (key, value)| hash.merge key.to_s => value }
|
79
|
-
end
|
65
|
+
def stringify_keys = reduce({}) { |hash, (key, value)| hash.merge key.to_s => value }
|
80
66
|
|
81
|
-
def stringify_keys!
|
82
|
-
replace stringify_keys
|
83
|
-
end
|
67
|
+
def stringify_keys! = replace(stringify_keys)
|
84
68
|
|
85
|
-
def symbolize_keys
|
86
|
-
reduce({}) { |hash, (key, value)| hash.merge key.to_sym => value }
|
87
|
-
end
|
69
|
+
def symbolize_keys = reduce({}) { |hash, (key, value)| hash.merge key.to_sym => value }
|
88
70
|
|
89
|
-
def symbolize_keys!
|
90
|
-
replace symbolize_keys
|
91
|
-
end
|
71
|
+
def symbolize_keys! = replace(symbolize_keys)
|
92
72
|
|
93
73
|
def use &block
|
94
74
|
return [] unless block
|
data/lib/refinements/identity.rb
CHANGED
data/lib/refinements/ios.rb
CHANGED
@@ -23,13 +23,9 @@ module Refinements
|
|
23
23
|
reopen backup
|
24
24
|
end
|
25
25
|
|
26
|
-
def reread
|
27
|
-
tap(&:rewind).read length, buffer
|
28
|
-
end
|
26
|
+
def reread(length = nil, buffer: nil) = tap(&:rewind).read(length, buffer)
|
29
27
|
|
30
|
-
def squelch &block
|
31
|
-
self.class.void.then { |void| redirect(void, &block) }
|
32
|
-
end
|
28
|
+
def squelch(&block) = self.class.void.then { |void| redirect(void, &block) }
|
33
29
|
end
|
34
30
|
end
|
35
31
|
end
|
@@ -5,6 +5,7 @@ require "pathname"
|
|
5
5
|
module Refinements
|
6
6
|
module Pathnames
|
7
7
|
refine Kernel do
|
8
|
+
# :reek:UncommunicativeMethodName
|
8
9
|
def Pathname object
|
9
10
|
return super(String(object)) unless object
|
10
11
|
|
@@ -13,9 +14,7 @@ module Refinements
|
|
13
14
|
end
|
14
15
|
|
15
16
|
refine Pathname.singleton_class do
|
16
|
-
def home
|
17
|
-
new ENV["HOME"]
|
18
|
-
end
|
17
|
+
def home = new(ENV["HOME"])
|
19
18
|
|
20
19
|
def make_temp_dir prefix: "temp-", suffix: nil, root: nil
|
21
20
|
Dir.mktmpdir([prefix, suffix], root) { |path| block_given? ? yield(new path) : new(path) }
|
@@ -25,9 +24,7 @@ module Refinements
|
|
25
24
|
new(root).files(pattern).each { |path| require path.to_s }
|
26
25
|
end
|
27
26
|
|
28
|
-
def root
|
29
|
-
new "/"
|
30
|
-
end
|
27
|
+
def root = new("/")
|
31
28
|
end
|
32
29
|
|
33
30
|
refine Pathname do
|
@@ -45,58 +42,36 @@ module Refinements
|
|
45
42
|
glob(pattern, flag).select(&:directory?).sort
|
46
43
|
end
|
47
44
|
|
48
|
-
def extensions
|
49
|
-
basename.to_s.split(/(?=\.)+/).tap(&:shift)
|
50
|
-
end
|
45
|
+
def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)
|
51
46
|
|
52
|
-
def files
|
53
|
-
glob(pattern, flag).select(&:file?).sort
|
54
|
-
end
|
47
|
+
def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?).sort
|
55
48
|
|
56
|
-
def gsub pattern, replacement
|
57
|
-
self.class.new to_s.gsub(pattern, replacement)
|
58
|
-
end
|
49
|
+
def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))
|
59
50
|
|
60
51
|
def make_ancestors
|
61
52
|
dirname.mkpath
|
62
53
|
self
|
63
54
|
end
|
64
55
|
|
65
|
-
def make_dir
|
66
|
-
exist? ? self : mkdir and self
|
67
|
-
end
|
56
|
+
def make_dir = exist? ? self : (mkdir and self)
|
68
57
|
|
69
58
|
def make_path
|
70
59
|
mkpath
|
71
60
|
self
|
72
61
|
end
|
73
62
|
|
74
|
-
def name
|
75
|
-
basename extname
|
76
|
-
end
|
77
|
-
|
78
|
-
def relative_parent root_dir
|
79
|
-
relative_path_from(root_dir).parent
|
80
|
-
end
|
63
|
+
def name = basename(extname)
|
81
64
|
|
82
|
-
def
|
83
|
-
warn "[DEPRECATION]: Pathname#relative_parent_from is deprecated, " \
|
84
|
-
"use Pathname#relative_parent instead."
|
85
|
-
relative_parent root_dir
|
86
|
-
end
|
65
|
+
def relative_parent(root_dir) = relative_path_from(root_dir).parent
|
87
66
|
|
88
|
-
def remove_dir
|
89
|
-
exist? ? (rmdir and self) : self
|
90
|
-
end
|
67
|
+
def remove_dir = exist? ? (rmdir and self) : self
|
91
68
|
|
92
69
|
def remove_tree
|
93
70
|
rmtree if exist?
|
94
71
|
self
|
95
72
|
end
|
96
73
|
|
97
|
-
def rewrite
|
98
|
-
read.then { |content| write yield(content) if block_given? }
|
99
|
-
end
|
74
|
+
def rewrite = read.then { |content| write yield(content) if block_given? }
|
100
75
|
|
101
76
|
def touch at = Time.now
|
102
77
|
exist? ? utime(at, at) : write("")
|
data/lib/refinements/strings.rb
CHANGED
@@ -5,9 +5,7 @@ module Refinements
|
|
5
5
|
DELIMITERS = %r([a-z][A-Z]|\s*-\s*|\s*/\s*|\s*:+\s*|\s*_\s*|\s+)
|
6
6
|
|
7
7
|
refine String do
|
8
|
-
def blank?
|
9
|
-
match?(/\A\s*\z/)
|
10
|
-
end
|
8
|
+
def blank? = match?(/\A\s*\z/)
|
11
9
|
|
12
10
|
def camelcase
|
13
11
|
return up unless match? DELIMITERS
|
@@ -67,9 +65,7 @@ module Refinements
|
|
67
65
|
.then { |parts| combine parts, :up, "/" }
|
68
66
|
end
|
69
67
|
|
70
|
-
def to_bool
|
71
|
-
%w[true yes on t y 1].include? downcase.strip
|
72
|
-
end
|
68
|
+
def to_bool = %w[true yes on t y 1].include?(downcase.strip)
|
73
69
|
|
74
70
|
def up
|
75
71
|
return self if empty?
|
data/lib/refinements/structs.rb
CHANGED
@@ -3,23 +3,15 @@
|
|
3
3
|
module Refinements
|
4
4
|
module Structs
|
5
5
|
refine Struct.singleton_class do
|
6
|
-
def keyworded?
|
7
|
-
inspect.include? "keyword_init: true"
|
8
|
-
end
|
6
|
+
def keyworded? = inspect.include?("keyword_init: true")
|
9
7
|
|
10
|
-
def with_keywords **arguments
|
11
|
-
keyworded? ? new(**arguments) : new.merge!(**arguments)
|
12
|
-
end
|
8
|
+
def with_keywords(**arguments) = keyworded? ? new(**arguments) : new.merge!(**arguments)
|
13
9
|
|
14
|
-
def with_positions *values
|
15
|
-
keyworded? ? new(**Hash[members.zip values]) : new(*values)
|
16
|
-
end
|
10
|
+
def with_positions(*values) = keyworded? ? new(**members.zip(values).to_h) : new(*values)
|
17
11
|
end
|
18
12
|
|
19
13
|
refine Struct do
|
20
|
-
def merge **attributes
|
21
|
-
dup.merge!(**attributes)
|
22
|
-
end
|
14
|
+
def merge(**attributes) = dup.merge!(**attributes)
|
23
15
|
|
24
16
|
def merge! **attributes
|
25
17
|
to_h.merge(**attributes).each { |key, value| self[key] = value }
|
@@ -29,9 +21,7 @@ module Refinements
|
|
29
21
|
def revalue attributes = each_pair
|
30
22
|
return self unless block_given?
|
31
23
|
|
32
|
-
dup.tap
|
33
|
-
attributes.each { |key, value| copy[key] = yield self[key], value }
|
34
|
-
end
|
24
|
+
dup.tap { |copy| attributes.each { |key, value| copy[key] = yield self[key], value } }
|
35
25
|
end
|
36
26
|
|
37
27
|
def revalue! attributes = each_pair
|
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: 8.
|
4
|
+
version: 8.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
@@ -10,9 +10,9 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIC/
|
14
|
-
|
15
|
-
|
13
|
+
MIIC/jCCAeagAwIBAgIBBDANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
|
14
|
+
a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMTAzMTkxMjQ4MDZaFw0yMjAzMTkx
|
15
|
+
MjQ4MDZaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
|
16
16
|
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6l1qpXTiomH1RfMRloyw7MiE
|
17
17
|
xyVx/x8Yc3EupdH7uhNaTXQGyORN6aOY//1QXXMHIZ9tW74nZLhesWMSUMYy0XhB
|
18
18
|
brs+KkurHnc9FnEJAbG7ebGvl/ncqZt72nQvaxpDxvuCBHgJAz+8i5wl6FhLw+oT
|
@@ -20,15 +20,15 @@ cert_chain:
|
|
20
20
|
D5vkU0YlAm1r98BymuJlcQ1qdkVEI1d48ph4kcS0S0nv1RiuyVb6TCAR3Nu3VaVq
|
21
21
|
3fPzZKJLZBx67UvXdbdicWPiUR75elI4PXpLIic3xytaF52ZJYyKZCNZJhNwfQID
|
22
22
|
AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU0nzow9vc
|
23
|
-
2CdikiiE3fJhP/
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAEjpaOXHHp8s/7GL2qCb
|
24
|
+
YAs7urOLv9VHSPfQWAwaTMVnSsIf3Sw4xzISOP/mmfEPBPXtz61K5esrE/uTFtgb
|
25
|
+
FyjxQk2H0sEWgrRXGGNHBWQRhhEs7LP/TByoC15A0br++xLxRz4r7HBLGAWQQDpg
|
26
|
+
66BJ2TBVjxS6K64tKbq7+ACyrOZGgTfNHACh4M076y0x0oRf/rwBrU39/KRfuhbb
|
27
|
+
cm+nNCEtO35gTmZ2bVDHLGvWazi3gJt6+huQjfXTCUUG2YYBxwhu+GPdAGQPxpf9
|
28
|
+
lkHilIrX69jq8wMPpBhlaw2mRmeSL50Wv5u6xVBvOHhXFSP1crXM95vfLhLyRYod
|
29
|
+
W2A=
|
30
30
|
-----END CERTIFICATE-----
|
31
|
-
date:
|
31
|
+
date: 2021-08-08 00:00:00.000000000 Z
|
32
32
|
dependencies: []
|
33
33
|
description:
|
34
34
|
email:
|
@@ -75,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
requirements: []
|
78
|
-
rubygems_version: 3.2.
|
78
|
+
rubygems_version: 3.2.25
|
79
79
|
signing_key:
|
80
80
|
specification_version: 4
|
81
81
|
summary: A collection of refinements to core Ruby objects.
|
metadata.gz.sig
CHANGED
Binary file
|