class Camt::Parser
Attributes
file[RW]
Public Instance Methods
parse(file)
click to toggle source
# File lib/camt/parser.rb, line 44 def parse file self.file = file file.doc.remove_namespaces! file.doc.xpath('//BkToCstmrStmt').map{|node| parse_message node } end
parse_Stmt(node)
click to toggle source
# File lib/camt/parser.rb, line 6 def parse_Stmt(node) # Parse a single Stmt node. # # Be sure to craft a unique, but short enough statement identifier, # as it is used as the basis of the generated move lines' names # which overflow when using the full IBAN and CAMT statement id. Statement.new(node, file.country_code) end
parse_message(node)
click to toggle source
# File lib/camt/parser.rb, line 15 def parse_message node group_header_node = node.at('./GrpHdr') group_header = GroupHeader.new group_header.message_id = group_header_node.at('./MsgId').text group_header.created_at = Time.parse(group_header_node.at('./CreDtTm').text) group_header.additional_info = group_header_node.at('./AddtlInf').try(:text) if recipient_node = group_header_node.at('./MsgRcpt') group_header.recipient = { name: recipient_node.at('./Nm').try(:text), postal_address: recipient_node.at('./PstlAdr').try(:text), identification: recipient_node.at('./Id').try(:text), country_of_residence: recipient_node.at('./CtryOfRes').try(:text), contact_details: recipient_node.at('./CtctDtls').try(:text) } end if pagination_node = group_header_node.at('./MsgPgntn') group_header.pagination = { page: pagination_node.at('./PgNb').text, last_page: (pagination_node.at('./LastPgInd').text == 'true') } end message = Message.new message.group_header = group_header message.statements = node.xpath('./Stmt').map{|node| parse_Stmt node } message end