1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
# frozen_string_literal: true
module JMESPath
# @api private
module Nodes
class MultiSelectHash < Node
def initialize(kv_pairs)
@kv_pairs = kv_pairs
end
def visit(value)
if value.nil?
nil
else
@kv_pairs.each_with_object({}) do |pair, hash|
hash[pair.key] = pair.value.visit(value)
end
end
end
def optimize
self.class.new(@kv_pairs.map(&:optimize))
end
class KeyValuePair
attr_reader :key, :value
def initialize(key, value)
@key = key
@value = value
end
def optimize
self.class.new(@key, @value.optimize)
end
end
end
end
end
|