class Bai2::BaiFile::Group
¶ ↑
Entities
Attributes
accounts[R]
Public Class Methods
new()
click to toggle source
# File lib/bai2.rb, line 101 def initialize @accounts = [] end
Private Class Methods
parse(node)
click to toggle source
# File lib/bai2.rb, line 115 def self.parse(node) self.new.tap do |g| g.send(:parse, node) end end
Public Instance Methods
as_of_datetime()
click to toggle source
# File lib/bai2.rb, line 110 def as_of_datetime @header[:as_of_date] + @header[:as_of_time] end
Private Instance Methods
assert_integrity!(options)
click to toggle source
Asserts integrity of a fully-parsed BaiFile
by calculating checksums.
# File lib/bai2/integrity.rb, line 58 def assert_integrity!(options) expectation = { sum: @trailer[:group_control_total], children: @trailer[:number_of_accounts], records: @trailer[:number_of_records], } # Check children count unless expectation[:children] == (actual = self.accounts.count) raise IntegrityError.new("Number of accounts invalid: " \ + "expected #{expectation[:children]}, actually: #{actual}") end # Check sum vs. account sums actual_sum = self.accounts.map do |acct| acct.instance_variable_get(:@trailer)[:account_control_total] end.reduce(0, &:+) unless expectation[:sum] == actual_sum raise IntegrityError.new( "Sums invalid: file: #{expectation[:sum]}, groups: #{actual_sum}") end # Run children assertions, which return number of records. May raise. records = self.accounts.map {|a| a.send(:assert_integrity!, options) }.reduce(0, &:+) unless expectation[:records] == (actual_num_records = records + 2) raise IntegrityError.new( "Record count invalid: group: #{expectation[:records]}, accounts: #{actual_num_records}") end # Return record count actual_num_records end
parse(n)
click to toggle source
# File lib/bai2.rb, line 121 def parse(n) unless n.code == :group_header && \ n.records.map(&:code) == [:group_header, :group_trailer] raise ParseError.new('Unexpected record.') end @header, @trailer = *n.records @accounts = n.children.map {|child| Account.send(:parse, child) } end