class MudratProjector::Account

Constants

TYPES

Attributes

open_date[RW]

Public Class Methods

new(params = {}) click to toggle source
# File lib/mudrat_projector/account.rb, line 7
def initialize params = {}
  @entries         = []
  @open_date       = params[:open_date] || ABSOLUTE_START
  @offset          = 0
  @opening_balance = params[:opening_balance] || 0
  @parent_id       = params[:parent_id] || nil
  @tags            = params[:tags] || []
  @type            = params.fetch :type
end

Public Instance Methods

add_entry(entry) click to toggle source
# File lib/mudrat_projector/account.rb, line 17
def add_entry entry
  @entries.push entry
  @offset += entry.delta
end
balance() click to toggle source
# File lib/mudrat_projector/account.rb, line 22
def balance
  @opening_balance + @offset
end
close!() click to toggle source
# File lib/mudrat_projector/account.rb, line 26
def close!
  freeze
  return self if closed?
  self.class.new serialize
end
closed?() click to toggle source
# File lib/mudrat_projector/account.rb, line 32
def closed?
  @entries.empty?
end
create_child(params = {}) click to toggle source
# File lib/mudrat_projector/account.rb, line 36
def create_child params = {}
  new_params = serialize
  new_params.merge!(
    opening_balance: params[:opening_balance],
    parent_id: params.fetch(:parent_id),
    tags: (tags | Array(params[:tags])),
  )
  self.class.new new_params
end
parent?() click to toggle source
# File lib/mudrat_projector/account.rb, line 46
def parent?
  parent_id.nil? ? false : true
end
serialize() click to toggle source
# File lib/mudrat_projector/account.rb, line 54
def serialize
  hash = { opening_balance: balance }
  %i(open_date parent_id tags type).each do |attr|
    value = public_send attr
    unless default_value? attr, value
      hash[attr] = value unless Array(value).empty?
    end
  end
  hash
end
tag?(tag_name) click to toggle source
# File lib/mudrat_projector/account.rb, line 50
def tag? tag_name
  tags.include? tag_name
end

Private Instance Methods

default_value?(attr, value) click to toggle source
# File lib/mudrat_projector/account.rb, line 67
def default_value? attr, value
  if attr == :open_date
    value == ABSOLUTE_START
  else
    false
  end
end