Sha256: 980c7d4a3144bf12898102c7f0d6e1ccd038526f58fe0e4e3b10411cfdebf597

Contents?: true

Size: 714 Bytes

Versions: 15

Compression:

Stored size: 714 Bytes

Contents

module DuckPuncher
  module Ducks
    module Hash
      # http://coryodaniel.com/index.php/2009/12/30/ruby-getting-deeply-nested-values-from-a-hash-in-one-line-of-code/
      def dig(*_keys_)
        last_level = self
        sought_value = nil
        _keys_.each_with_index do |_key_, _idx_|
          break unless last_level.respond_to?(:has_key?)
          break unless last_level.has_key?(_key_)
          if _idx_ + 1 == _keys_.length
            sought_value = last_level[_key_]
          else
            last_level = last_level[_key_]
          end
        end

        sought_value
      end unless method_defined?(:dig)

      def compact
        delete_if { |_, v| v.nil? }
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
duck_puncher-5.0.1 lib/duck_puncher/ducks/hash.rb
duck_puncher-5.0.0 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.5.1 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.5.0 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.4.2 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.4.1 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.4.0 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.3.1 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.3.0 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.2.3 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.2.2 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.2.1 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.2.0 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.1.0 lib/duck_puncher/ducks/hash.rb
duck_puncher-4.0.0 lib/duck_puncher/ducks/hash.rb