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