Class: OFX::Parser::OFX102

Inherits:
Object
  • Object
show all
Defined in:
lib/ofx_br/parser/ofx102.rb

Direct Known Subclasses

OFX103, OFX211

Constant Summary collapse

VERSION =
'1.0.2'
ACCOUNT_TYPES =
{
  'CHECKING' => :checking,
  'SAVINGS' => :savings,
  'CREDITLINE' => :creditline,
  'MONEYMRKT' => :moneymrkt
}
TRANSACTION_TYPES =
%w[
  ATM CASH CHECK CREDIT DEBIT DEP DIRECTDEBIT DIRECTDEP DIV
  FEE INT OTHER PAYMENT POS REPEATPMT SRVCHG XFER
].each_with_object({}) { |tran_type, hash| hash[tran_type] = tran_type.downcase.to_sym; }
SEVERITY =
{
  'INFO' => :info,
  'WARN' => :warn,
  'ERROR' => :error
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ OFX102

Returns a new instance of OFX102.



26
27
28
29
30
31
32
33
# File 'lib/ofx_br/parser/ofx102.rb', line 26

def initialize(options = {})
  @headers = options[:headers]
  @body = options[:body]
  @html = Nokogiri::HTML.parse(body)

  @date_start ||= build_date(@html.search('banktranlist > dtstart').inner_text)
  @date_end ||= build_date(@html.search('banktranlist > dtend').inner_text)
end

Instance Attribute Details

#bodyObject (readonly)

Returns the value of attribute body.



24
25
26
# File 'lib/ofx_br/parser/ofx102.rb', line 24

def body
  @body
end

#date_endObject (readonly)

Returns the value of attribute date_end.



24
25
26
# File 'lib/ofx_br/parser/ofx102.rb', line 24

def date_end
  @date_end
end

#date_startObject (readonly)

Returns the value of attribute date_start.



24
25
26
# File 'lib/ofx_br/parser/ofx102.rb', line 24

def date_start
  @date_start
end

#headersObject (readonly)

Returns the value of attribute headers.



24
25
26
# File 'lib/ofx_br/parser/ofx102.rb', line 24

def headers
  @headers
end

#htmlObject (readonly)

Returns the value of attribute html.



24
25
26
# File 'lib/ofx_br/parser/ofx102.rb', line 24

def html
  @html
end

Class Method Details

.parse_headers(header_text) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/ofx_br/parser/ofx102.rb', line 52

def self.parse_headers(header_text)
  # Change single CR's to LF's to avoid issues with some banks
  header_text.gsub!(/\r(?!\n)/, "\n")

  # Parse headers. When value is NONE, convert it to nil.
  headers = header_text.to_enum(:each_line).each_with_object({}) do |line, memo|
    _, key, value = *line.match(/^(.*?):(.*?)\s*(\r?\n)*$/)

    unless key.nil?
      memo[key] = value == 'NONE' ? nil : value
    end
  end

  return headers unless headers.empty?
end

Instance Method Details

#accountObject

DEPRECATED: kept for legacy support



44
45
46
# File 'lib/ofx_br/parser/ofx102.rb', line 44

def 
  @account ||= (html.search('stmttrnrs, ccstmttrnrs').first)
end

#accountsObject



39
40
41
# File 'lib/ofx_br/parser/ofx102.rb', line 39

def accounts
  @accounts ||= html.search('stmttrnrs, ccstmttrnrs').collect { |node| (node) }
end

#sign_onObject



48
49
50
# File 'lib/ofx_br/parser/ofx102.rb', line 48

def sign_on
  @sign_on ||= build_sign_on
end

#statementsObject



35
36
37
# File 'lib/ofx_br/parser/ofx102.rb', line 35

def statements
  @statements ||= html.search('stmttrnrs, ccstmttrnrs').collect { |node| build_statement(node) }
end