dig-deep 0.1.0 → 0.3.0

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
  SHA1:
3
- metadata.gz: 35933e61d897b3d44728667d1e655d7b08a897f7
4
- data.tar.gz: c719afa694f9819a030831b062731658bebf4ebd
3
+ metadata.gz: 563354f25c72b3573fbc436f52712e208fee6f38
4
+ data.tar.gz: bce9171e337fc5ba4293ad9a8910ec41b8cae186
5
5
  SHA512:
6
- metadata.gz: eb18b9fd7ec987dafdd3103a0b6d70d0045f2399ba5132abb945db3db87d681a8a7efdae0c903388a57c1d28c12370e6171c48bbae43acc3835f230e2a82ea4e
7
- data.tar.gz: 06824caf48cc80bbc629ffabf44de98b2a14187751444491b5437d6ef00d620a938e3e31222a210b7250f49b1dae5345ee0c6d82cd6c6b07b26c97db5bfa33fc
6
+ metadata.gz: e7f729c28969100cce81699b5028f3d5591fe49b731e090770bab6651d3cf53256e84e90b76d4677c1bc092e03e7f9af753ee7a2f6bf99400298b21b86b30f3d
7
+ data.tar.gz: 245df5cceda689d2c7f66fcc04c7d0c4efa4d87367345623cdbc48f903f01af2928340603172da0ae9ce14525cd313a766a228818ee8800fcc5982cac82c5b6a
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dig-deep (0.1.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.4.2)
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 (~> 10.0)
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).
@@ -0,0 +1 @@
1
+ theme: jekyll-theme-slate
@@ -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", "~> 10.0"
26
+ spec.add_development_dependency "rake", "~> 12.3.3"
26
27
  spec.add_development_dependency "rspec", "~> 3.0"
27
28
  end
@@ -3,11 +3,11 @@ require "json"
3
3
 
4
4
  module DigDeep
5
5
  def dig_deep(target)
6
- results = dig_for(self, target)
6
+ symbolized_obj = JSON.parse(JSON[self], symbolize_names: true)
7
7
 
8
- return nil if results.empty?
9
- return results[0] if results.length === 1
10
- return results
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 dig_for(obj, target)
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
- if (obj.is_a?(Hash) && obj.key?(target))
30
- acc = obj[target].is_a?(Array) ? ["#{obj[target]}"] : [ obj[target] ]
31
- end
32
-
33
- obj.reduce(acc ||= []) do |acc, val|
34
- if (val.is_a?(Hash) && val.key?(target))
35
- acc << (val[target].is_a?(Array) ? "#{val[target]}" : val[target])
36
- elsif val.is_a?(Array)
37
- acc << val.reduce([]){|acc, v| drill(v, target) if is_object?(v) }
38
- elsif val.is_a?(Hash)
39
- acc << val.values.reduce([]){|acc,v| drill(v,target)}
40
- else
41
- acc
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
- return true if ( obj.class == Hash || obj.class == Array )
49
- return false
45
+ obj.class == Hash || obj.class == Array
50
46
  end
51
47
 
52
48
  def string_to_array(val)
@@ -1,3 +1,3 @@
1
1
  module DigDeep
2
- VERSION = "0.1.0"
2
+ VERSION = "0.3.0"
3
3
  end
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.1.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: 2018-07-27 00:00:00.000000000 Z
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: '10.0'
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: '10.0'
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: '0'
90
+ version: 2.3.1
90
91
  required_rubygems_version: !ruby/object:Gem::Requirement
91
92
  requirements:
92
93
  - - ">="