module SuperForm::AtomicSave

Constants

ReformAtomicSaveError

Public Class Methods

after_commit(method_name=nil, &block) click to toggle source
# File lib/super_form/concerns/atomic_save.rb, line 22
def self.after_commit(method_name=nil, &block)
  set_defined_callback(:transaction, :after, method_name, &block)
end
after_validations(method_name=nil, &block) click to toggle source
# File lib/super_form/concerns/atomic_save.rb, line 30
def self.after_validations(method_name=nil, &block)
  set_defined_callback(:validations, :after, method_name, &block)
end
before_commit(method_name=nil, &block) click to toggle source
# File lib/super_form/concerns/atomic_save.rb, line 18
def self.before_commit(method_name=nil, &block)
  set_defined_callback(:queries, :after, method_name, &block)
end
before_queries(method_name=nil, &block) click to toggle source
# File lib/super_form/concerns/atomic_save.rb, line 14
def self.before_queries(method_name=nil, &block)
  set_defined_callback(:queries, :before, method_name, &block)
end
before_transaction(method_name=nil, &block) click to toggle source
# File lib/super_form/concerns/atomic_save.rb, line 10
def self.before_transaction(method_name=nil, &block)
  set_defined_callback(:transaction, :before, method_name, &block)
end
before_validations(method_name=nil, &block) click to toggle source
# File lib/super_form/concerns/atomic_save.rb, line 26
def self.before_validations(method_name=nil, &block)
  set_defined_callback(:validations, :before, method_name, &block)
end
set_defined_callback(event, callback, method_name=nil, &block) click to toggle source
# File lib/super_form/concerns/atomic_save.rb, line 36
def self.set_defined_callback(event, callback, method_name=nil, &block)
  raise "wrong number of arguments ('method_name' or 'block' choose one)" if method_name.nil? == false && block.present?
  if block_given?
    set_callback event, callback, &block
  else
    set_callback event, callback, method_name
  end
end

Public Instance Methods

save_with_transaction(params={}, &block) click to toggle source
# File lib/super_form/concerns/atomic_save.rb, line 48
def save_with_transaction(params={}, &block)
  begin
    save_with_transaction!(params, &block)
  rescue ReformAtomicSaveError
    false
  end
end
save_with_transaction!(params={}) { || ... } click to toggle source
# File lib/super_form/concerns/atomic_save.rb, line 56
def save_with_transaction!(params={}, &block)
  run_callbacks :transaction do
    ActiveRecord::Base.transaction do
      run_callbacks :queries do
        # 1. do validate data
        run_callbacks :validations do
          if validate(params) == false
            raise ReformAtomicSaveError, "Not Validate => #{self.errors.full_messages.inspect}"
          end
        end

        # 2. sync to model
        sync

        # 2. define how to store data in block
        yield if block_given?

        # 3. save all data
        save!
      end
    end
  end
  true
end