class Subledger::Domain::Line

Attributes

account[RW]
journal_entry[R]
order[RW]
value[RW]

Public Class Methods

active_klass() click to toggle source
# File lib/subledger/domain/line.rb, line 39
def self.active_klass
  ActiveLine
end
archived_klass() click to toggle source
# File lib/subledger/domain/line.rb, line 35
def self.archived_klass
  ArchivedLine
end
new(args) click to toggle source
# File lib/subledger/domain/line.rb, line 56
def initialize args
  describable args
  identifiable args
  storable args
  versionable args

  @journal_entry = args[:journal_entry]
  @account       = args[:account]
  @value         = args[:value]
  @order         = args[:order]

  specialized_initialization args
end
posted_klass() click to toggle source
# File lib/subledger/domain/line.rb, line 43
def self.posted_klass
  PostedLine
end
root_klass() click to toggle source
# File lib/subledger/domain/line.rb, line 27
def self.root_klass
  Line
end
specialized_raise_unless_creatable(args) click to toggle source
# File lib/subledger/domain/line.rb, line 53
def self.specialized_raise_unless_creatable args
end
sub_klasses() click to toggle source
# File lib/subledger/domain/line.rb, line 31
def self.sub_klasses
  [ archived_klass, active_klass, posted_klass ]
end
update(args) click to toggle source
Calls superclass method
# File lib/subledger/domain/line.rb, line 47
def self.update args
  raise_on_duplicate_orders args

  super
end

Private Class Methods

raise_on_duplicate_orders(args) click to toggle source
# File lib/subledger/domain/line.rb, line 103
def self.raise_on_duplicate_orders args
  client = args[:client]

  journal_entry = client.journal_entry :id => args[:journal_entry].id

  order = BigDecimal args[:order]

  journal_entry.lines.each do |line|
    if order == BigDecimal( line.order )
      raise LineError, "lines must have unique orders: #{args[:orders]}"
    end
  end
end
raise_unless_creatable(args) click to toggle source
# File lib/subledger/domain/line.rb, line 117
def self.raise_unless_creatable args
  raise_on_duplicate_orders args

  raise_unless_create_and_postable args

  journal_entry = args[:journal_entry]

  if UUID.invalid? journal_entry.id
    raise LineError, ':journal_entry must have a valid :id'
  end
end
raise_unless_create_and_postable(args) click to toggle source
# File lib/subledger/domain/line.rb, line 129
def self.raise_unless_create_and_postable args
  journal_entry = args[:journal_entry]

  if journal_entry.nil? or not journal_entry.kind_of? JournalEntry
    raise LineError, ':journal_entry is required and must be a JournalEntry'
  end

  account = args[:account]

  if account.nil? or not account.kind_of? Account
    raise LineError, ':account is required and must be an Account'
  elsif UUID.invalid? account.id
    raise LineError, ':account must have a valid :id'
  end

  value = args[:value]

  if value.nil? or not value.kind_of? Value
    raise LineError, ':value is required and must be a Value'
  end

  order = args[:order]

  if order.nil? or
     order !~ /^\d{1,4}[.]?\d{0,2}$/
    raise LineError, ':order is required and in the form [###]#[.##]'
  end

  bd_order = BigDecimal order

  if bd_order <= 0 or bd_order >= 10_000
    raise LineError, ':order must be > 0 and < 10,000'
  end

  specialized_raise_unless_creatable args
end
specialized_keys() click to toggle source
# File lib/subledger/domain/line.rb, line 99
def self.specialized_keys
  []
end

Public Instance Methods

amount() click to toggle source
# File lib/subledger/domain/line.rb, line 70
def amount
  value.amount
end

Private Instance Methods

specialized_initialization(args) click to toggle source
# File lib/subledger/domain/line.rb, line 166
def specialized_initialization args
end