class MudratProjector::Transaction
Attributes
credits[RW]
Public Class Methods
new(params = {})
click to toggle source
# File lib/mudrat_projector/transaction.rb, line 7 def initialize params = {} @date = params.fetch :date self.credits = extract_entry_params :credit, params self.debits = extract_entry_params :debit, params end
Public Instance Methods
balanced?()
click to toggle source
# File lib/mudrat_projector/transaction.rb, line 13 def balanced? sum_credits = build_set_for_balance credits sum_debits = build_set_for_balance debits (sum_credits ^ sum_debits).empty? end
credits=(credits)
click to toggle source
# File lib/mudrat_projector/transaction.rb, line 19 def credits= credits @credits = build_entries :credit, credits end
debits=(debits)
click to toggle source
# File lib/mudrat_projector/transaction.rb, line 23 def debits= debits @debits = build_entries :debit, debits end
each(&block)
click to toggle source
# File lib/mudrat_projector/transaction.rb, line 27 def each &block credits.each &block debits.each &block end
slice(slice_date)
click to toggle source
# File lib/mudrat_projector/transaction.rb, line 32 def slice slice_date if date > slice_date [[], self] else [[self], nil] end end
Private Instance Methods
build_entries(credit_or_debit, entries)
click to toggle source
# File lib/mudrat_projector/transaction.rb, line 52 def build_entries credit_or_debit, entries entries.map do |entry_params| if entry_params.is_a? TransactionEntry entry_params else TransactionEntry.public_send "new_#{credit_or_debit}", entry_params end end end
build_set_for_balance(entries)
click to toggle source
# File lib/mudrat_projector/transaction.rb, line 62 def build_set_for_balance entries hash = Hash.new { |h,k| h[k] = 0 } entries.each do |entry| balance_key = entry.class == TransactionEntry ? :fixed : entry.other_account_id hash[balance_key] += entry.scalar end hash.reduce Set.new do |set, (_, value)| set << value; end end
extract_entry_params(credit_or_debit, params)
click to toggle source
# File lib/mudrat_projector/transaction.rb, line 42 def extract_entry_params credit_or_debit, params entries = Array params["#{credit_or_debit}s".to_sym] return entries unless params.has_key? credit_or_debit unless entries.empty? raise ArgumentError, "You cannot supply both #{credit_or_debit} and "\ "#{credit_or_debit}s" end [params.fetch(credit_or_debit)] end