class ActsAsAccount::Account

Public Class Methods

create(attributes = nil) click to toggle source
Calls superclass method
# File lib/acts_as_account/account.rb, line 36
def create(attributes = nil)
  find_on_error(attributes) do
    super
  end
end
create!(attributes = nil) click to toggle source
Calls superclass method
# File lib/acts_as_account/account.rb, line 30
def create!(attributes = nil)
  find_on_error(attributes) do
    super
  end
end
delete_account(number) click to toggle source
# File lib/acts_as_account/account.rb, line 42
def delete_account(number)
  transaction do
    account = find(number)
    raise ActiveRecord::ActiveRecordError, "Cannot be deleted" unless account.deleteable?

    account.holder.destroy if [ManuallyCreatedAccount, GlobalAccount].include?(account.holder.class)
    account.destroy
  end
end
find_on_error(attributes) { || ... } click to toggle source
# File lib/acts_as_account/account.rb, line 52
def find_on_error(attributes)
  yield

# Trying to create a duplicate key on a unique index raises StatementInvalid
rescue ActiveRecord::StatementInvalid
  record = if attributes[:holder]
    attributes[:holder].account(attributes[:name])
  else
    where(
      :holder_type => attributes[:holder_type],
      :holder_id   => attributes[:holder_id],
      :name        => attributes[:name]
    ).first
  end
  record || raise("Cannot find or create account with attributes #{attributes.inspect}")
end
for(name) click to toggle source
# File lib/acts_as_account/account.rb, line 26
def for(name)
  GlobalAccount.find_or_create_by(name: name).account
end
recalculate_all_balances() click to toggle source
# File lib/acts_as_account/account.rb, line 16
def recalculate_all_balances
  find_each do |account|
    account.update_columns(
      balance:        account.postings.sum(:amount),
      postings_count: account.postings.count,
      last_valuta:    account.postings.maximum(:valuta)
    )
  end
end

Public Instance Methods

deleteable?() click to toggle source
# File lib/acts_as_account/account.rb, line 70
def deleteable?
  postings.empty? && journals.empty?
end