class JMESPath::Nodes::ChainedField
Public Class Methods
new(keys)
click to toggle source
# File lib/jmespath/nodes/field.rb, line 40 def initialize(keys) @keys = keys @key_syms = keys.each_with_object({}) do |k, syms| if k.respond_to?(:to_sym) syms[k] = k.to_sym end end end
Public Instance Methods
chain(other)
click to toggle source
# File lib/jmespath/nodes/field.rb, line 65 def chain(other) ChainedField.new([*@keys, *other.keys]) end
visit(obj)
click to toggle source
# File lib/jmespath/nodes/field.rb, line 49 def visit(obj) @keys.reduce(obj) do |value, key| if value.is_a?(Array) && key.is_a?(Integer) value[key] elsif value.is_a?(Hash) if !(v = value[key]).nil? v elsif (sym = @key_syms[key]) && !(v = value[sym]).nil? v end elsif value.is_a?(Struct) && value.respond_to?(key) value[key] end end end
Private Instance Methods
keys()
click to toggle source
# File lib/jmespath/nodes/field.rb, line 71 def keys @keys end