refinements 8.0.1 → 8.2.1

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: aa3c406709e8a34ba5de77de6416ba4a180a42dc994252fb35b9414a73d941c2
4
- data.tar.gz: 99426faa5a56f5352ed5620fe4a94e090121c7bd7555ad3c15d0b3a8beee65a1
3
+ metadata.gz: 3357c002920480a640ec080da0e8744f04a0883fa5ec54b75a88b77f7d2101d6
4
+ data.tar.gz: f7bd7990e5f362ec9b08e06f42beca263bff1c78be5a68d834cf7dc4fe58e961
5
5
  SHA512:
6
- metadata.gz: eeb946bc0824dd153fd3bb4615287b0e088c10693c45bdc728e2ee4f2f75207f079584d357afd3085ff289b3cbae45f1f5e14aeb099c0170e78adc0b6012a6bb
7
- data.tar.gz: 2fbe37e1cbc1f8c4cc966f7f3d7db70a74481481ecc4c5770053d2b156dfc681e6fd8b2ab1f4432d87daa719a9c6962dd8354a42011ccce61ed7c40d29768d25
6
+ metadata.gz: 968fc32529ba33a2833b814d722e38e0a5caffcfc3eba154528838a75469a0701847e3a9419d395d632a4c47cf52d927420e95558b90e0cb1b0868066ee99cd9
7
+ data.tar.gz: 3839e9d117a58251fd9304ad628a76aab0f22f7210542633e2e2fdc13abe38b38c25a126c111430f0c454bf29b5cc6c0b2a94d9473ed6caa59396dedeca8c2ba
checksums.yaml.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- �$�P�~�C���eY���&�"`L�%C{+z@t,6�O5��Hd�D����&wy��5]l5K��j%�͖�zK���������KGn��.td �ٖ]�-�es�gw{�������S �&3���|�&��py�T�R�#¦��%?I�m"V�����#VFk�](��55��y�t$Si@)�����iC�#���24�M{��r������*i��stk��Eu3�.t_?o�~"��3�
2
- �5��}
1
+ VmT7 �:�UlVCȡ�]��0*���8Omr�;��VHRY'������ma͒X����O1���KW%��2U����0$�ٗ>[.T,F�@랉\��[&2ѯ�ƞ��r�X�˅(�O#7dr#��g��0aJ��1yK1�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
@@ -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 *elements
15
- self - elements.flatten
16
- end
10
+ def excluding(*elements) = self - elements.flatten
17
11
 
18
- def including *elements
19
- self + elements.flatten
20
- end
12
+ def filter_find(&block) = block ? lazy.map(&block).find(&:itself) : lazy
21
13
 
22
- def intersperse *elements
23
- product([elements]).tap(&:pop).flatten.push last
24
- end
14
+ def including(*elements) = self + elements.flatten
25
15
 
26
- def mean
27
- size.zero? ? 0 : sum(0) / size
28
- end
16
+ def intersperse(*elements) = product([elements]).tap(&:pop).flatten.push(last)
29
17
 
30
- def pad value, max: size
31
- dup.fill value, size..(max - 1)
32
- end
18
+ def maximum(key) = map(&key).max
33
19
 
34
- def ring &block
35
- [last, *self, first].each_cons 3, &block
36
- end
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
@@ -5,9 +5,7 @@ require "date"
5
5
  module Refinements
6
6
  module DateTimes
7
7
  refine DateTime.singleton_class do
8
- def utc
9
- now.new_offset 0
10
- end
8
+ def utc = now.new_offset(0)
11
9
  end
12
10
  end
13
11
  end
@@ -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
@@ -5,7 +5,7 @@ module Refinements
5
5
  module Identity
6
6
  NAME = "refinements"
7
7
  LABEL = "Refinements"
8
- VERSION = "8.0.1"
8
+ VERSION = "8.2.1"
9
9
  VERSION_LABEL = "#{LABEL} #{VERSION}"
10
10
  end
11
11
  end
@@ -23,13 +23,9 @@ module Refinements
23
23
  reopen backup
24
24
  end
25
25
 
26
- def reread length = nil, buffer: nil
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 pattern = "*", flag: File::FNM_SYSCASE
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 relative_parent_from root_dir
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("")
@@ -5,9 +5,7 @@ require "stringio"
5
5
  module Refinements
6
6
  module StringIOs
7
7
  refine StringIO do
8
- def reread length = nil, buffer: nil
9
- tap(&:rewind).read length, buffer
10
- end
8
+ def reread(length = nil, buffer: nil) = tap(&:rewind).read(length, buffer)
11
9
  end
12
10
  end
13
11
  end
@@ -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?
@@ -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 do |copy|
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.0.1
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/jCCAeagAwIBAgIBAzANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
- a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMDAzMTUxNDQ1MzJaFw0yMTAzMTUx
15
- NDQ1MzJaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
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/gY4ggwDQYJKoZIhvcNAQELBQADggEBAIHhAlD3po4sTYqacXaQ
24
- XI9jIhrfMy//2PgbHWcETtlJPBeNUbbSNBABcllUHKqYsVDlSvSmss034KSWNR8F
25
- bF1GcloicyvcCC4y6IoW4it0COAcdeaaxkxiBSgKdQFpff9REnDlIKK4uQ9lLxIo
26
- Y2G5xubiziKZkyfWFuSr67PIjW3Bu673D1JVBArhA1qbgQmYQcy1CkGOjo+iO8Nf
27
- 7u/QSfBHb+r/bXhKscDgPpnKwbUmvgO2+94zJG9KsrmIydlzYfsD09aXKx0t6Xy4
28
- 2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
29
- QWc=
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: 2020-12-29 00:00:00.000000000 Z
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.3
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