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 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
  - - ">="