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
valid?()
click to toggle source
# File lib/formeze.rb, line 114 def valid? errors.empty? end