class Berg::Value
Public Class Methods
locate(object, query, debug = false)
click to toggle source
# File lib/berg/value.rb, line 11 def self.locate(object, query, debug = false) new(object, query, debug).locate end
new(object, query, debug = false)
click to toggle source
# File lib/berg/value.rb, line 5 def initialize(object, query, debug = false) @object = object @query = query @debug = debug end
Public Instance Methods
locate()
click to toggle source
# File lib/berg/value.rb, line 15 def locate result, _ = keys.inject([@object, ""]) do |(latest, trace), key| found = case key when Base::ARRAY_ID latest[$1.to_i] else latest[key] || latest[key.to_sym] end trace = add(trace, key) unless found fail "#{latest.class} doesn't contain key '#{key}' in '#{trace}'" if @debug return NotFound.new unless found end [found, trace] end return Found.new(result) end
Private Instance Methods
keys()
click to toggle source
# File lib/berg/value.rb, line 39 def keys @query.split(/\.|(\[-?\d+\])/).reject(&:empty?) end