Sha256: 20fd22f89ed8b15c779650741a1dd24258305530136ca3344107810eaed0af0f

Contents?: true

Size: 939 Bytes

Versions: 1

Compression:

Stored size: 939 Bytes

Contents

module Formalist
  class OutputCompiler
    def call(ast)
      ast.map { |node| visit(node) }.inject(:merge)
    end

    private

    def visit(node)
      send(:"visit_#{node[0]}", node[1])
    end

    def visit_attr(data)
      name, predicates, errors, children = data

      {name => children.map { |node| visit(node) }.inject(:merge) }
    end

    def visit_field(data)
      name, _type, _display_variant, value, _predicates, _errors = data

      {name => value.to_s}
    end

    def visit_group(data)
      config, children = data

      children.map { |node| visit(node) }.inject(:merge)
    end

    def visit_many(data)
      name, predicates, errors, config, template, children = data

      {name => children.map { |item| item.map { |node| visit(node) }.inject(:merge) }}
    end

    def visit_section(data)
      name, config, children = data

      children.map { |node| visit(node) }.inject(:merge)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
formalist-0.2.2 lib/formalist/output_compiler.rb