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