Sha256: 885e89beb3a80042f470dab266a1777e0687297efd0a1587c4e51ffb9096408e

Contents?: true

Size: 965 Bytes

Versions: 4

Compression:

Stored size: 965 Bytes

Contents

module Formulario
  class Field
    class FormField < Field
      attr_reader :form

      def self.[](type)
        Class.new(self) do |typed_class|
          typed_class.type = type
        end
      end

      def self.type
        @type
      end

      def value
        form.params
      end

      def exceptional?
        ! form.valid?
      end

      def fields
        form.fields
      end

      def [](value)
        fields[value]
      end

      def initialize(**raw_value)
        @form = self.class.type.new(**raw_value)
        super
      end

      private

      def self.build(raw_value)
        raise UndefinedFormFieldType.new unless @type

        new(raw_value)
      end

      def self.type=(new_type)
        @type = new_type
      end

      def method_missing(name, *args, &block)
        return fields[name] if fields.has_key?(name)

        super
      end

      UndefinedFormFieldType = Class.new(RuntimeError)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
formulario-0.1.2 lib/formulario/fields/form_field.rb
formulario-0.1.1b lib/formulario/fields/form_field.rb
formulario-0.1.1 lib/formulario/fields/form_field.rb
formulario-0.1.0 lib/formulario/fields/form_field.rb