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



37
38
39
40
41
42
43
# File 'lib/super_form/concerns/atomic_save.rb', line 37

def save_with_transaction(params={}, &block)
  begin
    save_with_transaction!(params, &block)
  rescue ReformAtomicSaveError
    false
  end
end

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



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/super_form/concerns/atomic_save.rb', line 45

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