module ActiveForm::Form

UnpersistentModel allows the ActiveForm::Form object to delegate methods to this object with expected results

Public Class Methods

included(base) click to toggle source
# File lib/activeform-rails/form.rb, line 2
def self.included(base)
  base.class_eval do
    extend ActiveModel::Naming
    include ActiveModel::Conversion
    include ActiveModel::Validations
  end
  base.extend ClassMethods
end
new(attributes = {}) click to toggle source
# File lib/activeform-rails/form.rb, line 74
def initialize(attributes = {})
  assign_from_hash(attributes)
end

Public Instance Methods

fill_attributes(params) click to toggle source
# File lib/activeform-rails/form.rb, line 78
def fill_attributes(params)
  assign_from_hash(params)
end
main_model() click to toggle source
# File lib/activeform-rails/form.rb, line 96
def main_model
  if self.class.main_model.kind_of?(Symbol)
    send(self.class.main_model)
  else
    self.class.main_model
  end
end
new_record?() click to toggle source
# File lib/activeform-rails/form.rb, line 104
def new_record?
  !persisted?
end
save(&block) click to toggle source
# File lib/activeform-rails/form.rb, line 82
def save(&block)
  ensure_persistable
  valid?.tap do
    call_action_or_block(:save, &block)
  end
end
save!(&block) click to toggle source
# File lib/activeform-rails/form.rb, line 89
def save!(&block)
  ensure_persistable
  ActiveRecord::Base.transaction do
    call_action_or_block(:save!, &block)
  end
end

Private Instance Methods

assign_from_hash(hash) click to toggle source
# File lib/activeform-rails/form.rb, line 123
def assign_from_hash(hash)
  hash.each { |key, value| send("#{key}=", value) }
end
call_action_or_block(action, &block) click to toggle source
# File lib/activeform-rails/form.rb, line 127
def call_action_or_block(action, &block)
  block_given? ? block.call(self) : each_models(&action)
end
each_models() { |send(model_name)| ... } click to toggle source
# File lib/activeform-rails/form.rb, line 117
def each_models
  self.class.models.each do |model_name|
    yield(send(model_name))
  end
end
ensure_persistable() click to toggle source
# File lib/activeform-rails/form.rb, line 110
def ensure_persistable
  message = 'The Form object is not backed by models so cannot be saved'
  if self.class.models.empty?
    raise ActiveForm::CannotBePersisted.new(message)
  end
end