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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +40 -0
- data/lib/deeper_hash/meta.rb +15 -0
- data/lib/deeper_hash/version.rb +1 -1
- data/lib/deeper_hash.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b29e69b3e3d34337166e92a2b1ecf9c5ec2c3d2cc4fe0522532a36db512e5974
|
4
|
+
data.tar.gz: 34f4dff563282fc66b4c5b494972b57df8ab8760215125d9b225faeb34eb5f0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f550da12d55295d2f62f071c8a8be83131cc2e6099f828803b7c8f37c3d3fb8dbf7f96c42fe1a73cd61f1f31954d4ae542e186614a80942c877cc3d107454be
|
7
|
+
data.tar.gz: b8999eaee8a12dd0261df3d5d556de59e46b52423fcd5b46bb5188c54e2ee19e6cb08ffc43919cf4697b930bae43ec394f629ed95fa6a8b5c02620a7c16e37db
|
data/CHANGELOG.md
CHANGED
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
|
data/lib/deeper_hash/meta.rb
CHANGED
@@ -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|
|
data/lib/deeper_hash/version.rb
CHANGED
data/lib/deeper_hash.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2022-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ttyhue
|