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