module Hashie::Extensions::DeepFetch

def deep_fetch(*args, &block)

def deep_fetch(*args, &block)
  args.reduce(self) do |obj, arg|
    begin
      arg = Integer(arg) if obj.kind_of? Array
      obj.fetch(arg)
    rescue ArgumentError, IndexError => e
      break block.call(arg) if block
      raise UndefinedPathError, "Could not fetch path (#{args.join(' > ')}) at #{arg}", e.backtrace
    end
  end
end