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