Class: Berg::Value

Inherits:
Object
  • Object
show all
Includes:
Base
Defined in:
lib/berg/value.rb

Constant Summary

Constants included from Base

Base::ARRAY_ID

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Base

#add

Constructor Details

#initialize(object, query, debug = false) ⇒ Value

Returns a new instance of Value.



5
6
7
8
9
# File 'lib/berg/value.rb', line 5

def initialize(object, query, debug = false)
  @object = object
  @query = query
  @debug = debug
end

Class Method Details

.locate(object, query, debug = false) ⇒ Object



11
12
13
# File 'lib/berg/value.rb', line 11

def self.locate(object, query, debug = false)
  new(object, query, debug).locate
end

Instance Method Details

#locateObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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