Module: Formeze::InstanceMethods

Defined in:
lib/formeze.rb

Instance Method Summary collapse

Instance Method Details

#add_error(field, error) ⇒ Object



106
107
108
109
110
# File 'lib/formeze.rb', line 106

def add_error(field, error)
  message = Formeze::Errors.translate(error, scope: "#{self.class.name}.errors.#{field.name}")

  errors << ValidationError.new(field, message)
end

#errorsObject



120
121
122
# File 'lib/formeze.rb', line 120

def errors
  @errors ||= []
end

#errors?Boolean

Returns:

  • (Boolean)


116
117
118
# File 'lib/formeze.rb', line 116

def errors?
  errors.size > 0
end

#errors_on(field_name) ⇒ Object



128
129
130
# File 'lib/formeze.rb', line 128

def errors_on(field_name)
  errors.select { |error| error.field_name == field_name }
end

#errors_on?(field_name) ⇒ Boolean

Returns:

  • (Boolean)


124
125
126
# File 'lib/formeze.rb', line 124

def errors_on?(field_name)
  errors.any? { |error| error.field_name == field_name }
end

#fill(object) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
# 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) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# 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

  Formeze.exclude.each do |key|
    form_data.delete(key)
  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_hObject Also known as: to_hash



132
133
134
135
136
# File 'lib/formeze.rb', line 132

def to_h
  self.class.fields.values.each_with_object({}) do |field, hash|
    hash[field.name] = send(field.name)
  end
end

#valid?Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/formeze.rb', line 112

def valid?
  errors.empty?
end