class FreeForm::Form

Public Class Methods

new(h={}) click to toggle source
# File lib/freeform/form.rb, line 31
def initialize(h={})
  h.each {|k,v| send("#{k}=",v)}
  initialize_child_models
end

Public Instance Methods

after_save() click to toggle source
# File lib/freeform/form.rb, line 67
def after_save
end
before_save() click to toggle source
# File lib/freeform/form.rb, line 64
def before_save
end
destroy() click to toggle source
# File lib/freeform/form.rb, line 56
def destroy
  models.each { |m| m.destroy }
end
marked_for_destruction?() click to toggle source
# File lib/freeform/form.rb, line 60
def marked_for_destruction?
  respond_to?(:_destroy) ? _destroy : false
end
persisted?() click to toggle source

Instance Methods

# File lib/freeform/form.rb, line 29
def persisted?; false end
save(*args) click to toggle source
# File lib/freeform/form.rb, line 36
def save(*args)
  if valid?
    before_save
    persist_models
    reload_models
    after_save
    true
  else
    false
  end
end
save!(*args) click to toggle source
# File lib/freeform/form.rb, line 48
def save!(*args)
  if valid?
    save
  else
    raise FreeForm::FormInvalid, "form invalid." 
  end
end

Private Instance Methods

initialize_child_models() click to toggle source
# File lib/freeform/form.rb, line 71
def initialize_child_models
  self.class.child_models.each do |c|
    send("initialize_#{c}")
  end
end
persist_models() click to toggle source
# File lib/freeform/form.rb, line 77
def persist_models
  models.each { |m| m.destroy if m.marked_for_destruction? }
  # We skip validation for underlying models, since we've already run our validation.
  models.each { |m| m.save(:validate => false) unless m.marked_for_destruction? }
end
reload_models() click to toggle source

TODO: Come up with a test that can validate this behavior

# File lib/freeform/form.rb, line 84
def reload_models
  models.each do |m| 
    unless m.marked_for_destruction?
      m.reload if m.respond_to?(:reload)
    end
  end
end