deeper_hash 0.1.0 → 0.1.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: 5d1ef6b02dd166070be15cb75cad60aa6a613d310f1e64638b9bace1c540f7f1
4
- data.tar.gz: 4cad788494e23a76d79dce3d0e5e437cb58bfad322acfdd066d0a4eee792e7bb
3
+ metadata.gz: b29e69b3e3d34337166e92a2b1ecf9c5ec2c3d2cc4fe0522532a36db512e5974
4
+ data.tar.gz: 34f4dff563282fc66b4c5b494972b57df8ab8760215125d9b225faeb34eb5f0a
5
5
  SHA512:
6
- metadata.gz: 58f67f87bfa15f38274caed83a85af1a8f688f6b2ef24d0d2e37cc27bd6598bbf6b6977fd978950178c4a8e6f5e2d3ddea046226e85ab74d521c35316e7e81a5
7
- data.tar.gz: ae2664777bfcb82adbc83f5053792810d2448f83e861aae5126d96af2ab8cd4a0d1a0a98d7af77e41a9550c7bf34200a66fb313ca0b9157ef7cc9e301c0b8d47
6
+ metadata.gz: 9f550da12d55295d2f62f071c8a8be83131cc2e6099f828803b7c8f37c3d3fb8dbf7f96c42fe1a73cd61f1f31954d4ae542e186614a80942c877cc3d107454be
7
+ data.tar.gz: b8999eaee8a12dd0261df3d5d556de59e46b52423fcd5b46bb5188c54e2ee19e6cb08ffc43919cf4697b930bae43ec394f629ed95fa6a8b5c02620a7c16e37db
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.1] - 2022-10-11
4
+
5
+ - Add `Hash#deep_each` for iterating through hash object recursively
6
+
3
7
  ## [0.1.0] - 2022-10-04
4
8
 
5
9
  - Initial release
data/README.md CHANGED
@@ -20,6 +20,35 @@ require 'deeper_hash'
20
20
 
21
21
  ## Methods
22
22
 
23
+ ### #deep_each
24
+
25
+ Traversing `Hash` recursively:
26
+
27
+ ```ruby
28
+ hash = {
29
+ a: 1,
30
+ b: {
31
+ c: 2,
32
+ d: {
33
+ e: 3,
34
+ f: 4
35
+ },
36
+ g: 5
37
+ },
38
+ h: 6
39
+ }
40
+
41
+ hash.deep_each do |keys, value|
42
+ puts "keys: #{keys.inspect}, value: #{value.inspect}"
43
+ end #=>
44
+ # keys: [:a], value: 1
45
+ # keys: [:b, :c], value: 2
46
+ # keys: [:b, :d, :e], value: 3
47
+ # keys: [:b, :d, :f], value: 4
48
+ # keys: [:b, :g], value: 5
49
+ # keys: [:h], value: 6
50
+ ```
51
+
23
52
  ### #deep_include?
24
53
 
25
54
  Same as `Hash#include?` but fully recursive:
@@ -119,6 +148,17 @@ hash.deep_select { |k,v| v > 9 }
119
148
 
120
149
  ### #deep_reject
121
150
 
151
+ ### #deep_set
152
+
153
+ Setting values for keys at ANY level:
154
+
155
+ ```ruby
156
+ hash = {}
157
+ hash.set("A value", :alpha, :beta, :gamma)
158
+ hash #=> { alpha: { beta: { gamma: "A value" }}}
159
+
160
+ ```
161
+
122
162
  Inverse of `#deep_select`
123
163
 
124
164
  ### #deep_transform_keys
@@ -3,6 +3,10 @@ module DeeperHash
3
3
 
4
4
  class << self
5
5
 
6
+ def each(hash, &block)
7
+ traverse(hash, [], &block)
8
+ end
9
+
6
10
  def transform_keys(hash, &block)
7
11
  transform(hash, include_hash_values: true) do |k, v, h|
8
12
  h[block.call(k)] = v
@@ -60,6 +64,17 @@ module DeeperHash
60
64
 
61
65
  private
62
66
 
67
+ def traverse(hash, keys, &block)
68
+ hash.each do |k,v|
69
+ case v
70
+ when Hash
71
+ traverse(v, keys + [k], &block)
72
+ else
73
+ block.call(keys + [k], v)
74
+ end
75
+ end
76
+ end
77
+
63
78
  def transform(hash, opts = {}, &block)
64
79
  {}.tap do |new_hash|
65
80
  hash.each do |k,v|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeeperHash
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/deeper_hash.rb CHANGED
@@ -12,6 +12,7 @@ module DeeperHash
12
12
  transform_values
13
13
  select
14
14
  reject
15
+ each
15
16
  ].each do |method|
16
17
  define_method "deep_#{method}" do |&block|
17
18
  Meta.send(method, self, &block)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deeper_hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Sito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-06 00:00:00.000000000 Z
11
+ date: 2022-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ttyhue