module Formeze::InstanceMethods

Public Instance Methods

add_error(field, error) click to toggle source
# File lib/formeze.rb, line 108
def add_error(field, error)
  message = Formeze::Errors.translate(error, scope: "#{self.class.name}.errors.#{field.name}")

  errors << ValidationError.new(field, message)
end
errors() click to toggle source
# File lib/formeze.rb, line 122
def errors
  @errors ||= []
end
errors?() click to toggle source
# File lib/formeze.rb, line 118
def errors?
  errors.size > 0
end
errors_on(field_name) click to toggle source
# File lib/formeze.rb, line 130
def errors_on(field_name)
  errors.select { |error| error.field_name == field_name }
end
errors_on?(field_name) click to toggle source
# File lib/formeze.rb, line 126
def errors_on?(field_name)
  errors.any? { |error| error.field_name == field_name }
end
fill(object) click to toggle source
# File lib/formeze.rb, line 52
def fill(object)
  self.class.fields.each_value do |field|
    if field.fill_proc?
      send(:"#{field.name}=", Formeze::Block.evaluate(object, field.fill_proc))
    elsif Hash === object && object.key?(field.name)
      send(:"#{field.name}=", object[field.name])
    elsif object.respond_to?(field.name)
      send(:"#{field.name}=", object.send(field.name))
    end
  end

  return self
end
parse(input) click to toggle source
# File lib/formeze.rb, line 66
def parse(input)
  form_data = FormData.parse(input)

  self.class.fields.each_value do |field|
    next if field.undefined?(self)

    unless form_data.key?(field.key)
      next if field.multiple? || !field.key_required?

      raise KeyError, "missing form key: #{field.key}" unless field.accept?
    end

    values = form_data.delete(field.key)

    if values.is_a?(Array)
      if values.length > 1
        raise ValueError, "multiple values for #{field.key} field" unless field.multiple?
      end

      field.validate_all(values, self)
    else
      field.validate(values, self)
    end
  end

  if defined?(Rails)
    form_data.delete('authenticity_token')
    form_data.delete('commit')
    form_data.delete('utf8')
  end

  unless form_data.empty?
    raise KeyError, "unexpected form keys: #{form_data.keys.sort.join(', ')}"
  end

  self.class.validations.each do |validation|
    validation.validate(self)
  end

  return self
end
to_h() click to toggle source
# File lib/formeze.rb, line 134
def to_h
  self.class.fields.values.each_with_object({}) do |field, hash|
    hash[field.name] = send(field.name)
  end
end
Also aliased as: to_hash
to_hash()
Alias for: to_h
valid?() click to toggle source
# File lib/formeze.rb, line 114
def valid?
  errors.empty?
end