Class: SimpleWallet::AccountCreditingService

Inherits:
Service
  • Object
show all
Defined in:
app/services/simple_wallet/account_crediting_service.rb

Instance Method Summary collapse

Methods inherited from Service

#errors_sentence, #t

Constructor Details

#initialize(account:, amount: nil, source: nil, note: nil) ⇒ AccountCreditingService

Returns a new instance of AccountCreditingService.



6
7
8
9
10
11
# File 'app/services/simple_wallet/account_crediting_service.rb', line 6

def initialize(account:, amount: nil, source: nil, note: nil)
  @account = 
  @amount = amount
  @source = source
  @note = note
end

Instance Method Details

#credit(set_transaction_isolation_level: true) ⇒ Object

Use set_transaction_isolation_level: false to avoid getting this exception:

ActiveRecord::TransactionIsolationError (cannot set isolation when joining a transaction)


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/services/simple_wallet/account_crediting_service.rb', line 15

def credit(set_transaction_isolation_level: true)
  # Setting transaction isolation level in tests is problematic due to nested transactions :|
  isolation_level = (::Rails.env.test? || !set_transaction_isolation_level) ? nil : :serializable

  ActiveRecord::Base.transaction(isolation: isolation_level) do
    return false unless valid?
    unless crediting_transaction.valid?
      copy_errors_from(crediting_transaction)
      return false
    end

    crediting_transaction.save!
    after_operation
  end

  true
end