Sha256: 7e2d31bd800cf720bbca55620625d6818a4e9eaf76aee902af7613ab84373917

Contents?: true

Size: 1.24 KB

Versions: 2

Compression:

Stored size: 1.24 KB

Contents

require "formalist/element"
require "formalist/types"

module Formalist
  class Elements
    class CompoundField < Element
      permitted_children :field

      def initialize(*args, attributes, children, input, errors)
        super
        @children = children.map { |definition| definition.(input, errors) }
      end

      # Converts the compound field into an abstract syntax tree.
      #
      # It takes the following format:
      #
      # ```
      # [:compound_field, [params]]
      # ```
      #
      # With the following parameters:
      #
      # 1. Custom element type (or `:compound_field` otherwise)
      # 2. Form element attributes
      # 3. Child form elements
      #
      # @see Formalist::Element::Attributes#to_ast "Form element attributes" structure
      #
      # @example
      #   compound_field.to_ast
      #   # => [:compound_field, [
      #     :content,
      #     :compound_field,
      #     [:object, []],
      #     [...child elements...],
      #   ]]
      #
      # @return [Array] the compound field as an abstract syntax tree.
      def to_ast
        [:compound_field, [
          type,
          Element::Attributes.new(attributes).to_ast,
          children.map(&:to_ast),
        ]]
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
formalist-0.3.0 lib/formalist/elements/compound_field.rb
formalist-0.2.3 lib/formalist/elements/compound_field.rb