Module: SuperForm::AtomicSave

Extended by:
ActiveSupport::Concern
Included in:
Reform
Defined in:
lib/super_form/concerns/atomic_save.rb

Constant Summary collapse

ReformAtomicSaveError =
Class.new(StandardError)

Instance Method Summary collapse

Instance Method Details

#save_with_transaction(params = {}, &block) ⇒ Object



48
49
50
51
52
53
54
# 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 = {}, &block) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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}"
          end
        end

        # 2. sync to model
        sync

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

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