class JMESPath::Nodes::Flatten

def initialize(child)

def initialize(child)
  @child = child
end

def optimize

def optimize
  self.class.new(@child.optimize)
end

def visit(value)

def visit(value)
  value = @child.visit(value)
  if value.respond_to?(:to_ary)
    value.to_ary.each_with_object([]) do |v, values|
      if v.respond_to?(:to_ary)
        values.concat(v.to_ary)
      else
        values.push(v)
      end
    end
  end
end