Module: Foobara::Persistence::EntityBase::Transaction::Concerns::TransactionTracking::ClassMethods

Defined in:
foobara-0.1.7/projects/persistence/src/entity_base/transaction/concerns/transaction_tracking.rb

Instance Method Summary collapse

Instance Method Details

#install!Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'foobara-0.1.7/projects/persistence/src/entity_base/transaction/concerns/transaction_tracking.rb', line 10

def install!
  Transaction::StateMachine.register_transition_callback(:after,
                                                         transition: :open) do |state_machine:, **|
    transaction = state_machine.owner
    Transaction.open_transactions << transaction
  end

  Transaction::StateMachine.register_transition_callback(:after, to: :closed) do |state_machine:, **|
    transaction = state_machine.owner
    Transaction.open_transactions.delete(transaction)
  end
end

#open_transaction_for(record) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'foobara-0.1.7/projects/persistence/src/entity_base/transaction/concerns/transaction_tracking.rb', line 32

def open_transaction_for(record)
  # let's check the current_transaction first since that usually will match
  tx = Persistence.current_transaction(record)

  if tx&.tracking?(record)
    return tx
  else
    entity_base = record.class.entity_base

    tx = open_transactions.find do |transaction|
      transaction.entity_base == entity_base && transaction.tracking?(record)
    end
  end

  tx
end

#open_transactionsObject



28
29
30
# File 'foobara-0.1.7/projects/persistence/src/entity_base/transaction/concerns/transaction_tracking.rb', line 28

def open_transactions
  @open_transactions ||= Set.new
end

#reset_allObject



23
24
25
26
# File 'foobara-0.1.7/projects/persistence/src/entity_base/transaction/concerns/transaction_tracking.rb', line 23

def reset_all
  Foobara.raise_if_production!("reset_all")
  @open_transactions = nil
end