Sha256: b80c75a6c587474fe6dc72c3338f1a7f23ca8aaa7b631a73fc761a29b4b1f325

Contents?: true

Size: 1.89 KB

Versions: 2

Compression:

Stored size: 1.89 KB

Contents

require 'pdf-reader'
require 'open-uri'
require_relative 'hb-pdf-parser/hb_transaction_helpers'

module NgBankParser
  class HbPdf

    extend HbTransactionHelpers

    class << self
      def parse(url, password = nil)
        unless ACCEPTED_FORMATS.include? File.extname(url)
          return INVALID_FILE_FORMAT_STRING
        end

        file = open(url)

        @reader = PDF::Reader.new(file)

        if pdf_is_valid? file
          generate_parse

          return account_statement_payload
        else
          return invalid_payload
        end
      end

      private

      def generate_parse
        set_account_name
        set_account_number
        set_end_date
        set_start_date
        extract_transactions
      end

      def extract_transactions
        @transactions = []

        @reader.pages.each do |page|
          page.text.remove_empty_lines.lines.each do |line|
            transaction_items_list = transaction_items(line)
            if transaction_items_list[TRANSACTION_DATE_INDEX].is_date?
              if transaction_is_a_debit?(transaction_items_list, line)
                create_transaction(line, 'debit')
              elsif transaction_is_a_credit?(transaction_items_list, line)
                create_transaction(line, 'credit')
              end
            end
          end
        end
      end

      def account_statement_payload
        return {
            status: VALID_ACCOUNT_STATUS,
            data: {
                bank_name: NgBankParser::Banks::BANK_DEFINITIONS[1][:name],
                account_number: @account_number,
                account_name: @account_name,
                from_date: @start_date,
                to_date: @end_date,
                transactions: @transactions
            }
        }
      end

      def invalid_payload
        {status: INVALID_ACCOUNT_STATUS,
         message: INVALID_ACCOUNT_STATEMENT}
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ng-bank-parser-0.1.7 lib/ng-bank-parser/parsers/hb-pdf-parser.rb
ng-bank-parser-0.1.6 lib/ng-bank-parser/parsers/hb-pdf-parser.rb