class JMESPath::Nodes::Chain

def initialize(children)

def initialize(children)
  @children = children
end

def optimize

def optimize
  children = @children.map(&:optimize)
  index = 0
  while index < children.size - 1
    if children[index].chains_with?(children[index + 1])
      children[index] = children[index].chain(children[index + 1])
      children.delete_at(index + 1)
    else
      index += 1
    end
  end
  Chain.new(children)
end

def visit(value)

def visit(value)
  @children.reduce(value) do |v, child|
    child.visit(v)
  end
end