Sha256: 870171d3da379df29395c6bccb8572cb77f05a1d7611c771ede4ccf3b71c7fd2
Contents?: true
Size: 1.74 KB
Versions: 5
Compression:
Stored size: 1.74 KB
Contents
require 'forwardable' require 'ostruct' require 'active_model' require 'freeform/form/form_input_key' require 'freeform/form/nested' require 'freeform/form/property' require 'freeform/form/validation' module FreeForm class FormInvalid < StandardError; end class Form extend Forwardable extend ActiveModel::Naming extend ActiveModel::Callbacks include ActiveModel::Conversion include ActiveModel::Validations include FreeForm::FormInputKey include FreeForm::Nested include FreeForm::Property include FreeForm::Validation # Instance Methods #---------------------------------------------------------------------------- # Required for ActiveModel def persisted?; false end def initialize(h={}) h.each {|k,v| send("#{k}=",v)} initialize_child_models end def save return false unless valid? self.class.models.each do |form_model| model = send(form_model) model.is_a?(Array) ? model.each { |m| m.save } : save_or_destroy(model) end end def save! raise FreeForm::FormInvalid, "form invalid." unless valid? self.class.models.each do |form_model| model = send(form_model) model.is_a?(Array) ? model.each { |m| m.save! } : save_or_destroy!(model) end end private def initialize_child_models self.class.child_models.each do |c| send("initialize_#{c}") end end def save_or_destroy(model) marked_for_destruction? ? model.destroy : model.save end def save_or_destroy!(model) marked_for_destruction? ? model.destroy : model.save! end def marked_for_destruction? respond_to?(:_destroy) ? _destroy : false end end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
freeform-1.0.4 | lib/freeform/form.rb |
freeform-1.0.3 | lib/freeform/form.rb |
freeform-1.0.2 | lib/freeform/form.rb |
freeform-1.0.1 | lib/freeform/form.rb |
freeform-1.0.0 | lib/freeform/form.rb |