dig-deep 0.1.0 → 0.3.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 +4 -4
- data/Gemfile.lock +3 -3
- data/README.md +24 -5
- data/_config.yml +1 -0
- data/dig-deep.gemspec +2 -1
- data/lib/dig-deep.rb +19 -23
- data/lib/dig_deep/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 563354f25c72b3573fbc436f52712e208fee6f38
|
4
|
+
data.tar.gz: bce9171e337fc5ba4293ad9a8910ec41b8cae186
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7f729c28969100cce81699b5028f3d5591fe49b731e090770bab6651d3cf53256e84e90b76d4677c1bc092e03e7f9af753ee7a2f6bf99400298b21b86b30f3d
|
7
|
+
data.tar.gz: 245df5cceda689d2c7f66fcc04c7d0c4efa4d87367345623cdbc48f903f01af2928340603172da0ae9ce14525cd313a766a228818ee8800fcc5982cac82c5b6a
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dig-deep (0.
|
4
|
+
dig-deep (0.3.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
diff-lcs (1.3)
|
10
|
-
rake (
|
10
|
+
rake (12.3.3)
|
11
11
|
rspec (3.7.0)
|
12
12
|
rspec-core (~> 3.7.0)
|
13
13
|
rspec-expectations (~> 3.7.0)
|
@@ -28,7 +28,7 @@ PLATFORMS
|
|
28
28
|
DEPENDENCIES
|
29
29
|
bundler (~> 1.16)
|
30
30
|
dig-deep!
|
31
|
-
rake (~>
|
31
|
+
rake (~> 12.3.3)
|
32
32
|
rspec (~> 3.0)
|
33
33
|
|
34
34
|
BUNDLED WITH
|
data/README.md
CHANGED
@@ -22,6 +22,11 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
$ gem install dig-deep
|
24
24
|
|
25
|
+
## Test
|
26
|
+
```sh
|
27
|
+
$ bundle exec rspec spec
|
28
|
+
```
|
29
|
+
|
25
30
|
## Usage
|
26
31
|
#### Example 1:
|
27
32
|
Given the following hash:
|
@@ -46,7 +51,7 @@ data.dig_deep(:c) // "abc"
|
|
46
51
|
```
|
47
52
|
|
48
53
|
#### Example 2:
|
49
|
-
Dig up all `:email`
|
54
|
+
Dig up all `:email` from arrays of objects
|
50
55
|
```
|
51
56
|
data = {
|
52
57
|
contacts: [{
|
@@ -110,6 +115,24 @@ data.dig_deep(:l9) // 9876
|
|
110
115
|
data.dig_deep(:xyz) // nil (returns nil when key is not found)
|
111
116
|
```
|
112
117
|
|
118
|
+
#### Example 4:
|
119
|
+
Object with symbol and string keys
|
120
|
+
```
|
121
|
+
data = {
|
122
|
+
:email => "email+1@example.com",
|
123
|
+
:level1 => {
|
124
|
+
"email" => "email+2@example.com"
|
125
|
+
}
|
126
|
+
}
|
127
|
+
```
|
128
|
+
```
|
129
|
+
require 'dig-deep'
|
130
|
+
|
131
|
+
data.dig_deep(:email) // ["email+1@example.com", "email+2@example.com"]
|
132
|
+
|
133
|
+
data.dig_deep('email') // ["email+1@example.com", "email+2@example.com"]
|
134
|
+
```
|
135
|
+
|
113
136
|
## Contributing
|
114
137
|
#### Bug reports and pull requests are welcome!
|
115
138
|
Fork it, create your new branch, push and create a pull request.
|
@@ -117,7 +140,3 @@ Fork it, create your new branch, push and create a pull request.
|
|
117
140
|
## License
|
118
141
|
|
119
142
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
120
|
-
|
121
|
-
## Code of Conduct
|
122
|
-
|
123
|
-
Everyone interacting in the DigDeep project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/dig-deep/blob/master/CODE_OF_CONDUCT.md).
|
data/_config.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
theme: jekyll-theme-slate
|
data/dig-deep.gemspec
CHANGED
@@ -21,7 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
+
spec.required_ruby_version = '>= 2.3.1'
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.16"
|
25
|
-
spec.add_development_dependency "rake", "~>
|
26
|
+
spec.add_development_dependency "rake", "~> 12.3.3"
|
26
27
|
spec.add_development_dependency "rspec", "~> 3.0"
|
27
28
|
end
|
data/lib/dig-deep.rb
CHANGED
@@ -3,11 +3,11 @@ require "json"
|
|
3
3
|
|
4
4
|
module DigDeep
|
5
5
|
def dig_deep(target)
|
6
|
-
|
6
|
+
symbolized_obj = JSON.parse(JSON[self], symbolize_names: true)
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
results = serialize_for(symbolized_obj, target.to_sym)
|
9
|
+
|
10
|
+
results.size <= 1 ? results[0] : results
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -15,10 +15,9 @@ class Hash
|
|
15
15
|
include DigDeep
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
18
|
private
|
20
19
|
|
21
|
-
def
|
20
|
+
def serialize_for(obj, target)
|
22
21
|
drill(obj, target).map do |m|
|
23
22
|
string_to_array(m) ? string_to_array(m) : m
|
24
23
|
end.compact
|
@@ -26,27 +25,24 @@ end
|
|
26
25
|
|
27
26
|
def drill(obj, target)
|
28
27
|
if is_object?(obj)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
obj.reduce(acc
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
43
|
-
end.compact.flatten(1)
|
28
|
+
acc = (obj.is_a?(Hash) && obj.key?(target)) \
|
29
|
+
? obj[target].is_a?(Array) ? ["#{obj[target]}"] : [ obj[target] ] \
|
30
|
+
: []
|
31
|
+
|
32
|
+
obj.reduce(acc) do |acc, val|
|
33
|
+
val.is_a?(Hash) \
|
34
|
+
? ( val.key?(target) \
|
35
|
+
? acc << (val[target].is_a?(Array) ? "#{val[target]}" : val[target]) \
|
36
|
+
: acc << val.values.reduce([]){|acc,v| drill(v,target)} )
|
37
|
+
: ( val.is_a?(Array) \
|
38
|
+
? acc << val.reduce([]){|acc, v| drill(v, target) if is_object?(v) } \
|
39
|
+
: acc )
|
40
|
+
end.flatten(1)
|
44
41
|
end
|
45
42
|
end
|
46
43
|
|
47
44
|
def is_object?(obj)
|
48
|
-
|
49
|
-
return false
|
45
|
+
obj.class == Hash || obj.class == Array
|
50
46
|
end
|
51
47
|
|
52
48
|
def string_to_array(val)
|
data/lib/dig_deep/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dig-deep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henry Szeto
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- LICENSE.txt
|
70
70
|
- README.md
|
71
71
|
- Rakefile
|
72
|
+
- _config.yml
|
72
73
|
- bin/console
|
73
74
|
- bin/setup
|
74
75
|
- dig-deep.gemspec
|
@@ -86,7 +87,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
86
87
|
requirements:
|
87
88
|
- - ">="
|
88
89
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
90
|
+
version: 2.3.1
|
90
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
92
|
requirements:
|
92
93
|
- - ">="
|