refinements 7.3.0 → 7.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 07f6d846bc9cd533e7c5b7fae5eb8c5e9fbe9d496f5abe6c32443e49d1e4c74b
4
- data.tar.gz: f5c01757545c4fb8f11f5485695ec4ecdaa5061966945161e8bdb7c53cfe5d19
3
+ metadata.gz: aa83a3ce542b62b6d89204aea8ac2411565a401f26150bfcdc64a2d4334d0313
4
+ data.tar.gz: c34503ce9aa7b522eac87ff66384fc8c1815c5907e4048a6023208f948a33cd1
5
5
  SHA512:
6
- metadata.gz: 2787e284a26eb3e5db5cd3c33024163440220c1fba90a81c887b166eadf6b54ab73b5f369b3b1a03042a65abcbd886a093ff304a240315a14ec58e3ab1cd83a3
7
- data.tar.gz: 6838f0cc48d65154bcb0761c4446bea18447a7571ec6a0836b58cff7c259f97365162bd636310a82fe6d1a9b8625edbb7cdba99521115ccee0c0059ba23c21cb
6
+ metadata.gz: 8bc6f8633db7a9caed51998e190aeccb77b74a755d83a8a982e93d7c4c9576044598e626b9457fb40da667aff76c9d87314ad42f4e2815d8287435eee5d71e2a
7
+ data.tar.gz: c23828f5179b57747cd0a173baa7deeee2fc1513791ecf1042612a23addf8443c7c012c6f316596b197a8765904e66d93f31141037271673e50bf2a6b9b56da8
checksums.yaml.gz.sig CHANGED
@@ -1,2 +1 @@
1
- ̤�)#��TK� �;� w!F>7�K������wI�� eC���x�<�P�?�Y�Ѩo.?�I�]�oB��S��I��c�>���5`&�����P��߯�[�����򷄔�yi���s<�"�ҭ`�N�5�D[� VM�ዺ��z�8���M�T[zIx6޼���+��2lYӉ9
2
- ^��8y��P���~p��C�մ�8WWla�A׹�bϓ�Q
1
+ ��%�z���z,
data.tar.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -33,13 +33,21 @@ file for manipulation and immediate writing back to the same file.
33
33
  ** `#symbolize_keys!` - Converts keys to symbols while modifying itself.
34
34
  ** `#deep_merge` - Merges deeply nested hashes together without modifying itself.
35
35
  ** `#deep_merge!` - Merges deeply nested hashes together while modifying itself.
36
+ ** `#deep_symbolize_keys` - Symbolizes keys of nested hash without modifying itself. Does not handle
37
+ nested arrays, though.
38
+ ** `#deep_symbolize_keys!` - Symbolizes keys of nested hash while modifying itself. Does not handle
39
+ nested arrays, though.
40
+ ** `#recurse` - Applies block to nested hash. Does not handle nested arrays, though.
41
+ ** `#rekey` - Transforms keys per mapping (size of mapping can vary).
36
42
  ** `#reverse_merge` - Merges calling hash into passed in hash without modifying calling hash.
37
43
  ** `#reverse_merge!` - Merges calling hash into passed in hash while modifying calling hash.
38
44
  ** `#use` - Passes each hash value as a block argument for further processing.
39
45
  * *Pathnames*:
40
46
  ** `#name` - Answers file name without extension.
41
47
  ** `#copy` - Copies file from current location to new location.
48
+ ** `#directories` - Answers all or filtered directories for current path.
42
49
  ** `#extensions` - Answers file extensions as an array.
50
+ ** `#files` - Answers all or filtered files for current path.
43
51
  ** `#relative_parent_from` - Answers relative path from parent directory. This is a complement to
44
52
  `#relative_path_from`.
45
53
  ** `#make_ancestors` - Ensures all ancestor directories are created for a path.
@@ -56,6 +64,7 @@ manipulation and immediate writing back to the same file.
56
64
  ** `#camelcase` - Answers a camelcased string.
57
65
  ** `#snakecase` - Answers a snakecased string.
58
66
  ** `#titleize` - Answers titleized string.
67
+ ** `#to_bool` - Answers string as a boolean.
59
68
 
60
69
  == Requirements
61
70
 
@@ -221,6 +230,21 @@ example = {a: "A", b: {one: "One", two: "Two"}}
221
230
  example.deep_merge! b: {one: 1} # => {a: "A", b: {one: 1, two: "Two"}}
222
231
  example # => {a: "A", b: {one: 1, two: "Two"}}
223
232
 
233
+ example = {"a" => {"b" => 2}}
234
+ example.deep_symbolize_keys # => {a: {b: 1}}
235
+ example # => {"a" => {"b" => 2}}
236
+
237
+ example = {"a" => {"b" => 2}}
238
+ example.deep_symbolize_keys! # => {a: {b: 1}}
239
+ example # => {a: {b: 1}}
240
+
241
+ example = {"a" => {"b" => 1}}
242
+ example.recurse(&:symbolize_keys) # => {a: {b: 1}}
243
+ example.recurse(&:invert) # => {{"b" => 1} => "a"}
244
+
245
+ example = {a: 1, b: 2, c: 3}
246
+ example.rekey a: :amber, b: :blue # => {amber: 1, blue: 2, c: 3}
247
+
224
248
  example = {a: 1, b: 2}
225
249
  example.reverse_merge a: 0, c: 3 # => {a: 1, b: 2, c: 3}
226
250
  example # => {a: 1, b: 2}
@@ -241,8 +265,14 @@ Pathname("example.txt").name # => Pathname("example")
241
265
 
242
266
  Pathname("input.txt").copy Pathname("output.txt")
243
267
 
268
+ Pathname("/example").directories # => [Pathname("a"), Pathname("b")]
269
+ Pathname("/example").directories "a*" # => [Pathname("a")]
270
+
244
271
  Pathname("example.txt.erb").extensions # => [".txt", ".erb"]
245
272
 
273
+ Pathname("/example").files # => [Pathname("a.txt"), Pathname("a.png")]
274
+ Pathname("/example").files "*.png" # => [Pathname("a.png")]
275
+
246
276
  Pathname("/one/two/three").relative_parent_from("/one") # => Pathname "two"
247
277
 
248
278
  Pathname("/one/two").make_ancestors
@@ -266,11 +296,22 @@ Pathname("example.txt").touch accessed_at: Time.now - 1, modified_at: Time.now -
266
296
  "instant".last 3 # => "ant"
267
297
 
268
298
  " \n\t\r".blank? # => true
299
+
269
300
  "example".up # => "Example"
301
+
270
302
  "EXAMPLE".down # => "eXAMPLE"
303
+
271
304
  "this_is_an_example".camelcase # => "ThisIsAnExample"
305
+
272
306
  "ThisIsAnExample".snakecase # => "this_is_an_example"
307
+
273
308
  "ThisIsAnExample".titleize # => "This Is An Example"
309
+
310
+ "true".to_bool # => true
311
+ "yes".to_bool # => true
312
+ "1".to_bool # => true
313
+ "".to_bool # => false
314
+ "example".to_bool # => false
274
315
  ----
275
316
 
276
317
  == Tests
@@ -23,10 +23,11 @@ module Refinements
23
23
  dup.deep_merge! other
24
24
  end
25
25
 
26
- # :reek:FeatureEnvy
27
26
  def deep_merge! other
27
+ clazz = self.class
28
+
28
29
  merge! other do |_key, this_value, other_value|
29
- if this_value.is_a?(Hash) && other_value.is_a?(Hash)
30
+ if this_value.is_a?(clazz) && other_value.is_a?(clazz)
30
31
  this_value.deep_merge other_value
31
32
  else
32
33
  other_value
@@ -34,11 +35,41 @@ module Refinements
34
35
  end
35
36
  end
36
37
 
38
+ def deep_symbolize_keys
39
+ recurse(&:symbolize_keys)
40
+ end
41
+
42
+ def deep_symbolize_keys!
43
+ recurse(&:symbolize_keys!)
44
+ end
45
+
46
+ def recurse &block
47
+ return self unless block_given?
48
+
49
+ transform = yield self
50
+
51
+ transform.each do |key, value|
52
+ transform[key] = value.recurse(&block) if value.is_a? self.class
53
+ end
54
+ end
55
+
56
+ def rekey mapping = {}
57
+ return self if mapping.empty?
58
+
59
+ transform_keys { |key| mapping[key] || key }
60
+ end
61
+
62
+ def rekey! mapping = {}
63
+ replace rekey(mapping)
64
+ end
65
+
37
66
  def reverse_merge other
67
+ warn "[DEPRECATION]: #reverse_merge is deprecated, use #merge instead."
38
68
  other.merge self
39
69
  end
40
70
 
41
71
  def reverse_merge! other
72
+ warn "[DEPRECATION]: #reverse_merge! is deprecated, use #merge! instead."
42
73
  merge!(other) { |_key, old_value, _new_value| old_value }
43
74
  end
44
75
 
@@ -5,7 +5,7 @@ module Refinements
5
5
  module Identity
6
6
  NAME = "refinements"
7
7
  LABEL = "Refinements"
8
- VERSION = "7.3.0"
8
+ VERSION = "7.4.0"
9
9
  VERSION_LABEL = "#{LABEL} #{VERSION}"
10
10
  end
11
11
  end
@@ -15,10 +15,18 @@ module Refinements
15
15
  self
16
16
  end
17
17
 
18
+ def directories pattern = "*"
19
+ glob(pattern).select(&:directory?).sort
20
+ end
21
+
18
22
  def extensions
19
23
  basename.to_s.split(/(?=\.)+/).tap(&:shift)
20
24
  end
21
25
 
26
+ def files pattern = "*"
27
+ glob(pattern).select(&:file?).sort
28
+ end
29
+
22
30
  def relative_parent_from root
23
31
  relative_path_from(root).parent
24
32
  end
@@ -79,6 +79,10 @@ module Refinements
79
79
  end
80
80
  end
81
81
 
82
+ def to_bool
83
+ %w[true yes on t y 1].include? downcase.strip
84
+ end
85
+
82
86
  private
83
87
 
84
88
  # :reek:DuplicateMethodCall
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.3.0
4
+ version: 7.4.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-05-13 00:00:00.000000000 Z
31
+ date: 2020-05-21 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: bundler-audit
metadata.gz.sig CHANGED
Binary file