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