class Formulario::Field::UnvalidatedField

Attributes

default[RW]
field_name[RW]
field_type[RW]
form[RW]
validators[RW]
value[RW]

Public Class Methods

new( field_name: , value: nil, field_type: Field, default: Field.type_for(field_type).default, validators: [] ) click to toggle source
# File lib/formulario/fields/unvalidated_field.rb, line 13
def initialize(
      field_name: ,

      value:      nil,
      field_type: Field,
      default:    Field.type_for(field_type).default,
      validators: []
    )


  @field_name = field_name

  @field_type = field_type
  @default    = default
  @validators = validators

end

Public Instance Methods

validate(validator=Undefined, message: Undefined, &validation_block) click to toggle source
# File lib/formulario/fields/unvalidated_field.rb, line 31
def validate(validator=Undefined,
             message: Undefined, &validation_block)

  validation_function = case
                        when block_given?
                          validation_block
                        when validator.is_a?(Symbol)
                          validator
                        when validator.is_a?(::Formulario::Validator)
                          validator
                        end

  validators << {
    validator: validation_function,
    message:   message,
  }
end
validate!(form) click to toggle source
# File lib/formulario/fields/unvalidated_field.rb, line 49
def validate!(form)
  self.form = form

  validators.inject(field_type.for(value.value)) do |current_value, validator_hash|
    validator_block = case validator_hash[:validator]
                      when ::Formulario::Validator
                        validator_hash[:validator]
                      when Symbol
                        ::Formulario::Validator.new(&value.method(validator_hash[:validator]))
                      when Proc
                        ::Formulario::Validator.new(&validator_hash[:validator])
                      end

    if instance_exec(value: value.value, object: self, field_name: field_name, &validator_block.to_proc).valid?
      current_value
    else
      message = if validator_hash[:validator].is_a?(::Formulario::Validator)
                  validator_hash[:validator].message
                end

      value.exceptional_class
        .new(current_value,
             reasons: message || validator_hash[:message])
    end
  end

end