# File lib/aform/form.rb, line 40 def primary_key(key) self.pkey = key end
class Aform::Form
Attributes
attributes[R]
form_model[R]
model[R]
nested_forms[R]
parent[R]
Public Class Methods
method_missing(meth, *args, &block)
click to toggle source
Calls superclass method
# File lib/aform/form.rb, line 54 def method_missing(meth, *args, &block) if meth.to_s.start_with?("validate") options = {method: meth, options: args} options.merge!(block: block) if block_given? self.validations ||= [] self.validations << options elsif meth == :has_many define_nested_form(args, &block) else super end end
new(model, attributes, parent = nil, opts = {})
click to toggle source
# File lib/aform/form.rb, line 7 def initialize(model, attributes, parent = nil, opts = {}) @opts = opts @attributes = attributes @model = model @parent = parent assign_opts_instances initialize_nested end
param(*args)
click to toggle source
# File lib/aform/form.rb, line 44 def param(*args) self.params ||= [] options = args.extract_options! elements = args.map do |a| field = {field: a} options.present? ? field.merge({options: options}) : field end self.params += elements end
primary_key(key)
click to toggle source
Protected Class Methods
define_nested_form(args, &block)
click to toggle source
# File lib/aform/form.rb, line 70 def self.define_nested_form(args, &block) name = args.shift self.nested_form_klasses ||= {} class_attribute name klass = Class.new(Aform::Form, &block) self.send("#{name}=", klass) self.nested_form_klasses.merge! name => klass end
Public Instance Methods
errors()
click to toggle source
# File lib/aform/form.rb, line 35 def errors @errors.messages end
invalid?()
click to toggle source
# File lib/aform/form.rb, line 27 def invalid? !valid? end
save()
click to toggle source
# File lib/aform/form.rb, line 31 def save self.valid? && @form_saver.save end
valid?()
click to toggle source
# File lib/aform/form.rb, line 16 def valid? if @nested_forms main = @form_model.valid? #all? don't invoike method on each element nested = @nested_forms.values.flatten.map(&:valid?).all? main && nested else @form_model.valid? end end
Private Instance Methods
assign_opts_instances()
click to toggle source
# File lib/aform/form.rb, line 81 def assign_opts_instances @errors = @opts[:errors] || Aform::Errors.new(self) @form_saver = @opts[:form_saver] || Aform::FormSaver.new(self) @form_model = @opts[:form_model] || Aform::Model.\ build_klass(self.params, self.validations).\ new(model, self, attributes) end
initialize_nested()
click to toggle source
# File lib/aform/form.rb, line 89 def initialize_nested @nested_forms = if nested_form_klasses nested_form_klasses.inject({}) do |memo, (k, v)| if attributes[k] nested = attributes[k].map do |attrs| v.new(nested_model(k, attrs, v.pkey), attrs, self, @opts) end memo.merge(k => nested) else memo end end end end
nested_model(association, attrs, key)
click to toggle source
# File lib/aform/form.rb, line 105 def nested_model(association, attrs, key) key = key || :id model.send(association).find_by(key => attrs[key]) || \ association.to_s.classify.constantize.new end