deeper_hash 0.1.0 → 0.1.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 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