module BetterDig

Constants

DIGGABLE_CLASSES
INDIFFERENT_FIND
VERSION

Public Instance Methods

digg(key, *rest) click to toggle source
# File lib/better_dig.rb, line 8
def digg(key, *rest)
  value = self[key.to_i] if match_array?(key)
  value = find_indifferent_value_by(key) if self.is_a?(Hash)
  return value             if value.nil? || rest.empty?
  return value.digg(*rest) if value.respond_to?(:digg)
  nil
end
fetch_path(path, default: nil, delimeter: '/') click to toggle source
# File lib/better_dig.rb, line 16
def fetch_path(path, default: nil, delimeter: '/')
  digg(*path.split(delimeter)).tap do |value|
    return default if value.nil?
    return value
  end
end

Private Instance Methods

find_indifferent_value_by(key) click to toggle source
# File lib/better_dig.rb, line 33
def find_indifferent_value_by(key)
  self[key.freeze].tap do |value|
    return value unless value.nil?
    return self[key.send(INDIFFERENT_FIND[key.class])]
  end
end
match_array?(key) click to toggle source
# File lib/better_dig.rb, line 25
def match_array?(key)
  if self.is_a?(Array)
    return key.match(/\A[0-9]+\z/) if key.is_a?(String)
    return true if key.is_a?(Numeric)
  end
  false
end