ng-bank-parser 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5904cb150c3b458c49643ee2ff3717ddaf01cc30
4
- data.tar.gz: 875fe8dc6feaccba17d8da19f27ebde90f45e0c0
3
+ metadata.gz: 051a42caac128747e23f1153ab29969b73cbaa38
4
+ data.tar.gz: 613248ebd4a944520d81c31366c3eebca7c6297e
5
5
  SHA512:
6
- metadata.gz: 5e09a5b5685f2d03555aeaf0ca727e3428acd730f2da07463b54c988d6351538ca58a20b8bbd77aaa4612dd06a513c0fe88aaac2956b60b190334b82111fe9fd
7
- data.tar.gz: c4e7303f6756d87d1d91c1bb48a94d3b99101dc2fe1ba16a0aa04b5e0743c038fb686a0c31a2998aaeee2daf2ab9feed485dd78ea9a146903da1795022b35d70
6
+ metadata.gz: b97fc6045653913ba4b119c814f53936265d895c72066c303266437411362cde7878d985e6049930ca20996717fa508db3f3b8ee6c6d6f43390210c832a71e63
7
+ data.tar.gz: 145c45868fb797ec049bbf9e26ba0621256a95ea3926f5c40018826d790237be0a99feb9bac79ed986eee6cea204f4f7452c5161d9c31d8ccaac4319f64fdfbe
data/.gitignore CHANGED
@@ -27,7 +27,7 @@ build/
27
27
 
28
28
  # for a library or gem, you might want to ignore these files since the code is
29
29
  # intended to run in multiple environments; otherwise, check them in:
30
- # Gemfile.lock
30
+ Gemfile.lock
31
31
  # .ruby-version
32
32
  # .ruby-gemset
33
33
 
@@ -11,64 +11,66 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- Ascii85 (1.0.2)
15
- activesupport (4.2.4)
16
- i18n (~> 0.7)
17
- json (~> 1.7, >= 1.7.7)
14
+ Ascii85 (1.0.3)
15
+ activesupport (5.2.1)
16
+ concurrent-ruby (~> 1.0, >= 1.0.2)
17
+ i18n (>= 0.7, < 2)
18
18
  minitest (~> 5.1)
19
- thread_safe (~> 0.3, >= 0.3.4)
20
19
  tzinfo (~> 1.1)
21
20
  afm (0.2.2)
22
- diff-lcs (1.2.5)
23
- domain_name (0.5.25)
21
+ concurrent-ruby (1.0.5)
22
+ diff-lcs (1.3)
23
+ domain_name (0.5.20180417)
24
24
  unf (>= 0.0.5, < 1.0.0)
25
- hashery (2.1.1)
26
- http-cookie (1.0.2)
25
+ hashery (2.1.2)
26
+ http-cookie (1.0.3)
27
27
  domain_name (~> 0.5)
28
- i18n (0.7.0)
29
- json (1.8.3)
30
- mime-types (2.99)
31
- mini_portile2 (2.0.0)
32
- minitest (5.8.3)
28
+ i18n (1.1.0)
29
+ concurrent-ruby (~> 1.0)
30
+ mime-types (3.2.2)
31
+ mime-types-data (~> 3.2015)
32
+ mime-types-data (3.2018.0812)
33
+ mini_portile2 (2.3.0)
34
+ minitest (5.11.3)
33
35
  netrc (0.11.0)
34
- nokogiri (1.6.7)
35
- mini_portile2 (~> 2.0.0.rc2)
36
- pdf-reader (1.3.3)
36
+ nokogiri (1.8.4)
37
+ mini_portile2 (~> 2.3.0)
38
+ pdf-reader (2.1.0)
37
39
  Ascii85 (~> 1.0.0)
38
- afm (~> 0.2.0)
40
+ afm (~> 0.2.1)
39
41
  hashery (~> 2.0)
40
42
  ruby-rc4
41
43
  ttfunk
42
- rake (10.4.2)
43
- rest-client (1.8.0)
44
+ rake (10.5.0)
45
+ rest-client (2.0.2)
44
46
  http-cookie (>= 1.0.2, < 2.0)
45
- mime-types (>= 1.16, < 3.0)
46
- netrc (~> 0.7)
47
- roo (2.1.1)
47
+ mime-types (>= 1.16, < 4.0)
48
+ netrc (~> 0.8)
49
+ roo (2.7.1)
48
50
  nokogiri (~> 1)
49
51
  rubyzip (~> 1.1, < 2.0.0)
50
- rspec (3.3.0)
51
- rspec-core (~> 3.3.0)
52
- rspec-expectations (~> 3.3.0)
53
- rspec-mocks (~> 3.3.0)
54
- rspec-core (3.3.2)
55
- rspec-support (~> 3.3.0)
56
- rspec-expectations (3.3.1)
52
+ rspec (3.8.0)
53
+ rspec-core (~> 3.8.0)
54
+ rspec-expectations (~> 3.8.0)
55
+ rspec-mocks (~> 3.8.0)
56
+ rspec-core (3.8.0)
57
+ rspec-support (~> 3.8.0)
58
+ rspec-expectations (3.8.1)
57
59
  diff-lcs (>= 1.2.0, < 2.0)
58
- rspec-support (~> 3.3.0)
59
- rspec-mocks (3.3.2)
60
+ rspec-support (~> 3.8.0)
61
+ rspec-mocks (3.8.0)
60
62
  diff-lcs (>= 1.2.0, < 2.0)
61
- rspec-support (~> 3.3.0)
62
- rspec-support (3.3.0)
63
+ rspec-support (~> 3.8.0)
64
+ rspec-support (3.8.0)
63
65
  ruby-rc4 (0.1.5)
64
- rubyzip (1.1.7)
65
- thread_safe (0.3.5)
66
- ttfunk (1.4.0)
67
- tzinfo (1.2.2)
66
+ rubyzip (1.2.2)
67
+ thread_safe (0.3.6)
68
+ ttfunk (1.5.1)
69
+ tzinfo (1.2.5)
68
70
  thread_safe (~> 0.1)
69
71
  unf (0.1.4)
70
72
  unf_ext
71
- unf_ext (0.0.7.1)
73
+ unf_ext (0.0.7.5)
72
74
 
73
75
  PLATFORMS
74
76
  ruby
@@ -80,4 +82,4 @@ DEPENDENCIES
80
82
  rspec
81
83
 
82
84
  BUNDLED WITH
83
- 1.10.6
85
+ 1.16.4
data/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
  This is a simple gem to parse Nigerian bank statements of all formats. If your bank and/or file format is not supported, consider reading the contribute wiki and submitting a pull request.
3
3
 
4
4
  ## API
5
- Because not everyone develops in rails, we created a public API to use the gem at http://bank-parser.devcenter.co/parse. The parameters are (bank_key, file_path, password). Read the *Usage* section for more information
5
+ Because not everyone develops in rails, we created a public API to use the gem at http://bank-parser.square-api.com/parse. The parameters are (bank_key, file_path, password). Read the *Usage* section for more information
6
6
 
7
- http://bank-parser.devcenter.co/parse(bank_key, file_path, password)
7
+ http://bank-parser.square-api.com/parse(bank_key, file_path, password)
8
8
 
9
9
  ## Installation
10
10
 
@@ -92,6 +92,14 @@ Heritage Bank:
92
92
  - key: hb
93
93
  - supported formats: pdf
94
94
 
95
+ Access Bank:
96
+ - key: accessbank
97
+ - supported formats: pdf
98
+
99
+ Ecobank:
100
+ - key: ecobank
101
+ - supported formats: pdf
102
+
95
103
  ## Contributing
96
104
 
97
105
  Documentation on contribution can be found in the contribution wiki
@@ -1,13 +1,14 @@
1
- require "ng-bank-parser/version"
2
- require "ng-bank-parser/banks"
3
- require "ng-bank-parser/router"
4
- require "ng-bank-parser/pdf-unlocker"
5
- require "ng-bank-parser/parsers/gtb-excel-parser"
6
- require "ng-bank-parser/parsers/uba-pdf-parser"
7
- require "ng-bank-parser/parsers/hb-pdf-parser"
8
- require "ng-bank-parser/parsers/firstbank-pdf-parser"
9
- require "ng-bank-parser/parsers/accessbank-pdf-parser"
1
+ require_relative "ng-bank-parser/version"
2
+ require_relative "ng-bank-parser/banks"
3
+ require_relative "ng-bank-parser/router"
4
+ require_relative "ng-bank-parser/pdf-unlocker"
5
+ require_relative "ng-bank-parser/parsers/gtb-excel-parser"
6
+ require_relative "ng-bank-parser/parsers/uba-pdf-parser"
7
+ require_relative "ng-bank-parser/parsers/hb-pdf-parser"
8
+ require_relative "ng-bank-parser/parsers/firstbank-pdf-parser"
9
+ require_relative "ng-bank-parser/parsers/accessbank-pdf-parser"
10
+ require_relative "ng-bank-parser/parsers/ecobank-pdf-parser"
10
11
 
11
12
  module NgBankParser
12
- # Your code goes here...
13
+ # Your code goes here...
13
14
  end
@@ -46,6 +46,15 @@ module NgBankParser
46
46
  invalid: "lib/ng-bank-parser/fixtures/accessbank-pdf-invalid.pdf",
47
47
  extensions: ["pdf"]
48
48
  }]
49
- }]
49
+ },{
50
+ key: "ecobank",
51
+ name: "Ecobank Nigeria",
52
+ parsers: [{
53
+ format: "pdf",
54
+ valid: "lib/ng-bank-parser/fixtures/ecobank-pdf-valid.pdf",
55
+ invalid: "lib/ng-bank-parser/fixtures/ecobank-pdf-invalid.pdf",
56
+ extensions: ["pdf"]
57
+ }]
58
+ }]
50
59
  end
51
60
  end
@@ -0,0 +1,160 @@
1
+ %PDF-1.3
2
+ 3 0 obj
3
+ <</Type /Page
4
+ /Parent 1 0 R
5
+ /Resources 2 0 R
6
+ /Contents 4 0 R>>
7
+ endobj
8
+ 4 0 obj
9
+ <</Length 165>>
10
+ stream
11
+ 0.57 w
12
+ 0 G
13
+ BT
14
+ /F1 16 Tf
15
+ 16 TL
16
+ 0 g
17
+ 56.69 785.20 Td
18
+ (Hello world!) Tj
19
+ ET
20
+ BT
21
+ /F1 16 Tf
22
+ 16 TL
23
+ 0 g
24
+ 56.69 756.85 Td
25
+ (This a random PDF file for testing our parsers.) Tj
26
+ ET
27
+ endstream
28
+ endobj
29
+ 1 0 obj
30
+ <</Type /Pages
31
+ /Kids [3 0 R ]
32
+ /Count 1
33
+ /MediaBox [0 0 595.28 841.89]
34
+ >>
35
+ endobj
36
+ 5 0 obj
37
+ <</BaseFont/Helvetica/Type/Font
38
+ /Encoding/WinAnsiEncoding
39
+ /Subtype/Type1>>
40
+ endobj
41
+ 6 0 obj
42
+ <</BaseFont/Helvetica-Bold/Type/Font
43
+ /Encoding/WinAnsiEncoding
44
+ /Subtype/Type1>>
45
+ endobj
46
+ 7 0 obj
47
+ <</BaseFont/Helvetica-Oblique/Type/Font
48
+ /Encoding/WinAnsiEncoding
49
+ /Subtype/Type1>>
50
+ endobj
51
+ 8 0 obj
52
+ <</BaseFont/Helvetica-BoldOblique/Type/Font
53
+ /Encoding/WinAnsiEncoding
54
+ /Subtype/Type1>>
55
+ endobj
56
+ 9 0 obj
57
+ <</BaseFont/Courier/Type/Font
58
+ /Encoding/WinAnsiEncoding
59
+ /Subtype/Type1>>
60
+ endobj
61
+ 10 0 obj
62
+ <</BaseFont/Courier-Bold/Type/Font
63
+ /Encoding/WinAnsiEncoding
64
+ /Subtype/Type1>>
65
+ endobj
66
+ 11 0 obj
67
+ <</BaseFont/Courier-Oblique/Type/Font
68
+ /Encoding/WinAnsiEncoding
69
+ /Subtype/Type1>>
70
+ endobj
71
+ 12 0 obj
72
+ <</BaseFont/Courier-BoldOblique/Type/Font
73
+ /Encoding/WinAnsiEncoding
74
+ /Subtype/Type1>>
75
+ endobj
76
+ 13 0 obj
77
+ <</BaseFont/Times-Roman/Type/Font
78
+ /Encoding/WinAnsiEncoding
79
+ /Subtype/Type1>>
80
+ endobj
81
+ 14 0 obj
82
+ <</BaseFont/Times-Bold/Type/Font
83
+ /Encoding/WinAnsiEncoding
84
+ /Subtype/Type1>>
85
+ endobj
86
+ 15 0 obj
87
+ <</BaseFont/Times-Italic/Type/Font
88
+ /Encoding/WinAnsiEncoding
89
+ /Subtype/Type1>>
90
+ endobj
91
+ 16 0 obj
92
+ <</BaseFont/Times-BoldItalic/Type/Font
93
+ /Encoding/WinAnsiEncoding
94
+ /Subtype/Type1>>
95
+ endobj
96
+ 2 0 obj
97
+ <<
98
+ /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
99
+ /Font <<
100
+ /F1 5 0 R
101
+ /F2 6 0 R
102
+ /F3 7 0 R
103
+ /F4 8 0 R
104
+ /F5 9 0 R
105
+ /F6 10 0 R
106
+ /F7 11 0 R
107
+ /F8 12 0 R
108
+ /F9 13 0 R
109
+ /F10 14 0 R
110
+ /F11 15 0 R
111
+ /F12 16 0 R
112
+ >>
113
+ /XObject <<
114
+ >>
115
+ >>
116
+ endobj
117
+ 17 0 obj
118
+ <<
119
+ /Producer (jsPDF 20120619)
120
+ /CreationDate (D:20150829130726)
121
+ >>
122
+ endobj
123
+ 18 0 obj
124
+ <<
125
+ /Type /Catalog
126
+ /Pages 1 0 R
127
+ /OpenAction [3 0 R /FitH null]
128
+ /PageLayout /OneColumn
129
+ >>
130
+ endobj
131
+ xref
132
+ 0 19
133
+ 0000000000 65535 f
134
+ 0000000301 00000 n
135
+ 0000001530 00000 n
136
+ 0000000009 00000 n
137
+ 0000000087 00000 n
138
+ 0000000388 00000 n
139
+ 0000000478 00000 n
140
+ 0000000573 00000 n
141
+ 0000000671 00000 n
142
+ 0000000773 00000 n
143
+ 0000000861 00000 n
144
+ 0000000955 00000 n
145
+ 0000001052 00000 n
146
+ 0000001153 00000 n
147
+ 0000001246 00000 n
148
+ 0000001338 00000 n
149
+ 0000001432 00000 n
150
+ 0000001754 00000 n
151
+ 0000001836 00000 n
152
+ trailer
153
+ <<
154
+ /Size 19
155
+ /Root 18 0 R
156
+ /Info 17 0 R
157
+ >>
158
+ startxref
159
+ 1940
160
+ %%EOF
@@ -111,8 +111,6 @@ module AccessbankPdfHelpers
111
111
  end
112
112
 
113
113
 
114
-
115
-
116
114
  def error(msg)
117
115
  { status: 400, message: msg }
118
116
  end
@@ -122,7 +120,6 @@ module AccessbankPdfHelpers
122
120
  end
123
121
 
124
122
 
125
-
126
123
  private
127
124
  def remove_line_spacing(str)
128
125
  str.gsub(/^$\n/, '').lines
@@ -161,6 +158,7 @@ module AccessbankPdfHelpers
161
158
  Date.strptime(date_str, '%d-%b-%y')
162
159
  end
163
160
 
161
+
164
162
  def string_with_slash_to_date(date_str)
165
163
  Date.strptime(date_str, '%d/%m/%Y')
166
164
  end
@@ -0,0 +1,35 @@
1
+ require 'pdf-reader'
2
+ require 'open-uri'
3
+ require_relative 'ecobank-pdf-parser/helpers'
4
+
5
+ module NgBankParser
6
+ class EcobankPdf
7
+ extend EcobankPdfHelpers
8
+
9
+ FILE_FORMATS = [".pdf"]
10
+
11
+ def self.parse(path, password=nil)
12
+ unless FILE_FORMATS.include? File.extname(path)
13
+ return error("Invalid file format. Please use one of the following: #{ FILE_FORMATS.each{ |format| format }}")
14
+ end
15
+
16
+ file = open(path)
17
+ begin
18
+ @pdf = PDF::Reader.new(file)
19
+ rescue PDF::Reader::EncryptedPDFError
20
+ return error("Invalid file. Please use an unencrypted pdf")
21
+ rescue
22
+ return error("Couldn't parse this file")
23
+ end
24
+
25
+ pdf_array = pdf_to_a(@pdf)
26
+
27
+ unless has_valid_details?(pdf_array)
28
+ return error("Couldn't fetch account details from pdf")
29
+ end
30
+
31
+ response = get_details(pdf_array)
32
+ return success(response)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,164 @@
1
+ module NgBankParser
2
+ module EcobankPdfHelpers
3
+
4
+ def pdf_to_a(pdf)
5
+ lines = []
6
+
7
+ pdf.pages.each do |page|
8
+ remove_line_spacing(page.text).each do |line|
9
+ lines << line.strip.split(/\s\s+/)
10
+ end
11
+ end
12
+
13
+ return lines
14
+ end
15
+
16
+
17
+ def get_details(pdf_array)
18
+ details = Hash.new
19
+ details[:bank_name] = 'Ecobank'
20
+ details[:account_number] = get_account_number(pdf_array)
21
+ details[:account_name] = get_account_name(pdf_array)
22
+
23
+ transactions = get_transactions(pdf_array)
24
+ details[:from_date] = transactions[0][:date]
25
+ details[:to_date] = transactions[-1][:date]
26
+ details[:transactions] = transactions
27
+
28
+ return details
29
+ end
30
+
31
+
32
+ def has_valid_details?(pdf_array)
33
+ return (get_account_number(pdf_array) and get_account_name(pdf_array))
34
+ end
35
+
36
+
37
+ def get_account_name(pdf_array)
38
+ pdf_array.each do |row|
39
+ row.each_with_index do |cell, index|
40
+ if cell == 'Name'
41
+ return row[index + 1]
42
+ end
43
+ end
44
+ end
45
+ return nil
46
+ end
47
+
48
+
49
+ def get_account_number(pdf_array)
50
+ pdf_array.each do |row|
51
+ row.each do |cell|
52
+ if cell =~ /[0-9]{10}/
53
+ return cell
54
+ end
55
+ end
56
+ end
57
+ return nil
58
+ end
59
+
60
+
61
+ def get_transactions(pdf_array)
62
+ start_index = get_first_line_of_transactions(pdf_array)
63
+ transactions = []
64
+
65
+ opening_balance = pdf_array[start_index][-1]
66
+
67
+ pdf_array[start_index..-1].each do |transaction|
68
+ if valid_transaction?(transaction)
69
+
70
+ transaction_hash = Hash.new
71
+ transaction_hash[:date] = string_with_dash_to_date(transaction[0])
72
+
73
+ if transaction.count == 6
74
+ transaction_hash[:remarks] = transaction[2]
75
+ transaction_hash[:ref] = transaction[3]
76
+ transaction_hash[:amount] = amount_to_f(transaction[4])
77
+ transaction_hash[:balance] = amount_to_f(transaction[5])
78
+ elsif transaction.count == 5
79
+ if transaction[2].chars.first === "'"
80
+ transaction_hash[:remarks] = ""
81
+ transaction_hash[:ref] = transaction[2]
82
+ transaction_hash[:amount] = amount_to_f(transaction[3])
83
+ transaction_hash[:balance] = amount_to_f(transaction[4])
84
+ elsif transaction[2].split("'")[1]
85
+ transaction_hash[:remarks] = transaction[2].split("'")[0]
86
+ transaction_hash[:ref] = transaction[2].split("'")[1]
87
+ transaction_hash[:amount] = amount_to_f(transaction[3])
88
+ transaction_hash[:balance] = amount_to_f(transaction[4])
89
+ else
90
+ transaction_hash[:remarks] = transaction[2]
91
+ transaction_hash[:ref] = transaction[3]
92
+ amount_and_balance = transaction[4].split(" ")
93
+ transaction_hash[:amount] = amount_to_f(amount_and_balance[0])
94
+ transaction_hash[:balance] = amount_to_f(amount_and_balance[1])
95
+ end
96
+ else
97
+ remarks_and_ref = transaction[2].split("'")
98
+ transaction_hash[:remarks] = remarks_and_ref[0]
99
+ transaction_hash[:ref] = "'" << remarks_and_ref[1]
100
+ amount_and_balance = transaction[3].split(" ")
101
+ transaction_hash[:amount] = amount_to_f(amount_and_balance[0])
102
+ transaction_hash[:balance] = amount_to_f(amount_and_balance[1])
103
+ end
104
+
105
+ transaction_hash[:type] = transaction_type(transaction_hash[:balance], opening_balance)
106
+
107
+ opening_balance = transaction_hash[:balance]
108
+ transactions << transaction_hash
109
+ end
110
+ end
111
+
112
+ return transactions
113
+ end
114
+
115
+
116
+ def error(message)
117
+ { status: 400, message: message }
118
+ end
119
+
120
+ def success(data)
121
+ { status: 200, data: data }
122
+ end
123
+
124
+
125
+ private
126
+ def remove_line_spacing(str)
127
+ str.gsub(/^$\n/, '').lines
128
+ end
129
+
130
+
131
+ def transaction_type(current_balance, former_balance)
132
+ former_balance = amount_to_f(former_balance) if former_balance.is_a?(String)
133
+
134
+ current_balance - former_balance > 1 ? 'credit' : 'debit'
135
+ end
136
+
137
+
138
+ def amount_to_f(amount)
139
+ amount.gsub(/[^\d\.]/, '').to_f
140
+ end
141
+
142
+
143
+ def get_first_line_of_transactions(pdf_array)
144
+ start = -1
145
+
146
+ pdf_array.each_with_index do |row, index|
147
+ start = index + 1 if row[0] == 'Transaction Date'
148
+ end
149
+
150
+ return start
151
+ end
152
+
153
+
154
+ def valid_transaction?(line)
155
+ # first column matches ecobank transaction date pattern and it has between 4 and 6 columns
156
+ line[0] =~ /([0-3][0-9])[\-]([a-zA-Z]+)[\-]([0-9]{4})/ and line.count >= 4 and line.count <= 6
157
+ end
158
+
159
+
160
+ def string_with_dash_to_date(date_str)
161
+ Date.strptime(date_str, '%d-%b-%y')
162
+ end
163
+ end
164
+ end
@@ -1,3 +1,3 @@
1
1
  module NgBankParser
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ng-bank-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Opemipo Aikomo
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2015-12-17 00:00:00.000000000 Z
14
+ date: 2018-09-14 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -150,6 +150,8 @@ files:
150
150
  - lib/ng-bank-parser/banks.rb
151
151
  - lib/ng-bank-parser/fixtures/accessbank-pdf-invalid.pdf
152
152
  - lib/ng-bank-parser/fixtures/accessbank-pdf-valid.pdf
153
+ - lib/ng-bank-parser/fixtures/ecobank-pdf-invalid.pdf
154
+ - lib/ng-bank-parser/fixtures/ecobank-pdf-valid.pdf
153
155
  - lib/ng-bank-parser/fixtures/firstbank-pdf-invalid.pdf
154
156
  - lib/ng-bank-parser/fixtures/firstbank-pdf-valid.pdf
155
157
  - lib/ng-bank-parser/fixtures/gtb-excel-invalid.pdf
@@ -161,6 +163,8 @@ files:
161
163
  - lib/ng-bank-parser/fixtures/uba-pdf-valid.pdf
162
164
  - lib/ng-bank-parser/parsers/accessbank-pdf-parser.rb
163
165
  - lib/ng-bank-parser/parsers/accessbank-pdf-parser/helpers.rb
166
+ - lib/ng-bank-parser/parsers/ecobank-pdf-parser.rb
167
+ - lib/ng-bank-parser/parsers/ecobank-pdf-parser/helpers.rb
164
168
  - lib/ng-bank-parser/parsers/firstbank-pdf-parser.rb
165
169
  - lib/ng-bank-parser/parsers/firstbank-pdf-parser/helpers.rb
166
170
  - lib/ng-bank-parser/parsers/firstbank-pdf-parser/statement_utils.rb
@@ -199,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
203
  version: '0'
200
204
  requirements: []
201
205
  rubyforge_project:
202
- rubygems_version: 2.4.5.1
206
+ rubygems_version: 2.5.2
203
207
  signing_key:
204
208
  specification_version: 4
205
209
  summary: This is a simple gem to parse Nigerian bank statements of all formats created