Sha256: 1e518ac8f830796731af52270183f3f69cb3d1f2756f74338ad5a658b59e5d78

Contents?: true

Size: 1.35 KB

Versions: 8

Compression:

Stored size: 1.35 KB

Contents

require "dry/configurable"
require "dry/core/constants"
require "formalist/elements"
require "formalist/definition"

module Formalist
  class Form
    extend Dry::Configurable
    include Dry::Core::Constants

    setting :elements_container, Elements

    class << self
      attr_reader :definition

      def define(&block)
        @definition = block
      end
    end

    attr_reader :elements
    attr_reader :input
    attr_reader :errors
    attr_reader :dependencies

    def initialize(elements: Undefined, input: {}, errors: {}, **dependencies)
      @input = input
      @errors = errors

      @elements =
        if elements == Undefined
          Definition.new(self, self.class.config, &self.class.definition).elements
        else
          elements
        end

      @dependencies = dependencies
    end

    def fill(input: {}, errors: {})
      return self if input == @input && errors == @errors

      self.class.new(
        elements: @elements.map { |element| element.fill(input: input, errors: errors) },
        input: input,
        errors: errors,
        **@dependencies,
      )
    end

    def with(**new_dependencies)
      self.class.new(
        elements: @elements,
        input: @input,
        errors: @errors,
        **@dependencies.merge(new_dependencies)
      )
    end

    def to_ast
      elements.map(&:to_ast)
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
formalist-0.7.0 lib/formalist/form.rb
formalist-0.6.0 lib/formalist/form.rb
formalist-0.5.4 lib/formalist/form.rb
formalist-0.5.3 lib/formalist/form.rb
formalist-0.5.2 lib/formalist/form.rb
formalist-0.5.1 lib/formalist/form.rb
formalist-0.5.0 lib/formalist/form.rb
formalist-0.4.2 lib/formalist/form.rb