ng-bank-parser 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +8 -8
- data/README.md +3 -3
- data/lib/ng-bank-parser/banks.rb +1 -1
- data/lib/ng-bank-parser/parsers/accessbank-pdf-parser/helpers.rb +2 -2
- data/lib/ng-bank-parser/parsers/firstbank-pdf-parser.rb +9 -7
- data/lib/ng-bank-parser/parsers/firstbank-pdf-parser/helpers.rb +17 -23
- data/lib/ng-bank-parser/parsers/gtb-excel-parser.rb +2 -2
- data/lib/ng-bank-parser/parsers/hb-pdf-parser.rb +1 -2
- data/lib/ng-bank-parser/parsers/hb-pdf-parser/hb_constants.rb +2 -2
- data/lib/ng-bank-parser/parsers/uba-pdf-parser.rb +2 -2
- data/lib/ng-bank-parser/router.rb +1 -1
- data/lib/ng-bank-parser/version.rb +1 -1
- metadata +23 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5904cb150c3b458c49643ee2ff3717ddaf01cc30
|
4
|
+
data.tar.gz: 875fe8dc6feaccba17d8da19f27ebde90f45e0c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e09a5b5685f2d03555aeaf0ca727e3428acd730f2da07463b54c988d6351538ca58a20b8bbd77aaa4612dd06a513c0fe88aaac2956b60b190334b82111fe9fd
|
7
|
+
data.tar.gz: c4e7303f6756d87d1d91c1bb48a94d3b99101dc2fe1ba16a0aa04b5e0743c038fb686a0c31a2998aaeee2daf2ab9feed485dd78ea9a146903da1795022b35d70
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ng-bank-parser (0.1.
|
4
|
+
ng-bank-parser (0.1.5)
|
5
5
|
activesupport
|
6
6
|
nokogiri
|
7
7
|
pdf-reader
|
@@ -20,19 +20,19 @@ GEM
|
|
20
20
|
tzinfo (~> 1.1)
|
21
21
|
afm (0.2.2)
|
22
22
|
diff-lcs (1.2.5)
|
23
|
-
domain_name (0.5.
|
23
|
+
domain_name (0.5.25)
|
24
24
|
unf (>= 0.0.5, < 1.0.0)
|
25
25
|
hashery (2.1.1)
|
26
26
|
http-cookie (1.0.2)
|
27
27
|
domain_name (~> 0.5)
|
28
28
|
i18n (0.7.0)
|
29
29
|
json (1.8.3)
|
30
|
-
mime-types (2.
|
31
|
-
|
32
|
-
minitest (5.8.
|
33
|
-
netrc (0.
|
34
|
-
nokogiri (1.6.
|
35
|
-
|
30
|
+
mime-types (2.99)
|
31
|
+
mini_portile2 (2.0.0)
|
32
|
+
minitest (5.8.3)
|
33
|
+
netrc (0.11.0)
|
34
|
+
nokogiri (1.6.7)
|
35
|
+
mini_portile2 (~> 2.0.0.rc2)
|
36
36
|
pdf-reader (1.3.3)
|
37
37
|
Ascii85 (~> 1.0.0)
|
38
38
|
afm (~> 0.2.0)
|
data/README.md
CHANGED
@@ -39,7 +39,7 @@ result = NgBankParser::Router.parse(bank_key, file_path, password)
|
|
39
39
|
|
40
40
|
```ruby
|
41
41
|
result = {
|
42
|
-
status:
|
42
|
+
status: 200,
|
43
43
|
data: {
|
44
44
|
bank_name: the_bank_name,
|
45
45
|
account_number: the_account_number,
|
@@ -51,11 +51,11 @@ result = {
|
|
51
51
|
}
|
52
52
|
```
|
53
53
|
|
54
|
-
`:status` can either be
|
54
|
+
`:status` can either be 200 or 400. 200 for when the parsing is succesful and 200 for when it's not. A status of 400 is accompanied with an error message that aims to clarify why it could not parse the file.
|
55
55
|
|
56
56
|
```ruby
|
57
57
|
result = {
|
58
|
-
status:
|
58
|
+
status: 400,
|
59
59
|
message: "RELEVANT ERROR MESSAGE"
|
60
60
|
}
|
61
61
|
```
|
data/lib/ng-bank-parser/banks.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
require 'pdf-reader'
|
2
2
|
require_relative 'firstbank-pdf-parser/helpers'
|
3
3
|
|
4
|
+
|
4
5
|
module NgBankParser
|
5
6
|
class FirstbankPdf
|
6
7
|
extend FirstbankPdfHelpers
|
7
8
|
|
8
|
-
@@transactions = []
|
9
|
-
|
10
9
|
def self.parse(path, password = nil)
|
11
10
|
accepted_formats = [".pdf"];
|
12
11
|
unless accepted_formats.include? File.extname(path)
|
@@ -29,15 +28,16 @@ module NgBankParser
|
|
29
28
|
return error_message 'Unable to read account details'
|
30
29
|
end
|
31
30
|
|
32
|
-
|
33
|
-
|
31
|
+
raw_transactions = contains_transactions_table?
|
32
|
+
if raw_transactions
|
33
|
+
bdd = extract_transactions(clean(raw_transactions))
|
34
34
|
data = {}
|
35
35
|
data[:bank_name] = 'First Bank'
|
36
36
|
data[:account_number] = get_account_number
|
37
37
|
data[:account_name] = get_account_name
|
38
38
|
data[:from_date] = get_from_date
|
39
39
|
data[:to_date] = get_to_date
|
40
|
-
data[:transactions] =
|
40
|
+
data[:transactions] = bdd
|
41
41
|
send_response data
|
42
42
|
else
|
43
43
|
return error_message 'Could not find any transactions'
|
@@ -47,6 +47,7 @@ module NgBankParser
|
|
47
47
|
private
|
48
48
|
|
49
49
|
def self.extract_transactions(jagged_array = [[]])
|
50
|
+
arr = []
|
50
51
|
jagged_array.each do |array|
|
51
52
|
if is_transaction_row? array
|
52
53
|
transaction = {}
|
@@ -62,11 +63,12 @@ module NgBankParser
|
|
62
63
|
transaction[:type] = 'debit'
|
63
64
|
update_last_balance transaction[:balance]
|
64
65
|
end
|
65
|
-
|
66
|
+
arr << transaction
|
66
67
|
else
|
67
|
-
|
68
|
+
arr.last[:remarks] += array[0]
|
68
69
|
end
|
69
70
|
end
|
71
|
+
arr
|
70
72
|
end
|
71
73
|
|
72
74
|
|
@@ -1,16 +1,14 @@
|
|
1
1
|
require 'pdf-reader'
|
2
2
|
require 'date'
|
3
3
|
require 'open-uri'
|
4
|
-
require 'securerandom'
|
5
4
|
require_relative 'statement_utils'
|
6
5
|
require_relative '../../pdf-unlocker.rb'
|
7
6
|
|
8
7
|
module NgBankParser
|
9
8
|
module FirstbankPdfHelpers
|
10
9
|
include StatementUtils
|
11
|
-
|
10
|
+
|
12
11
|
@@pdf_reader = nil
|
13
|
-
@@raw_transactions = [[]]
|
14
12
|
@@account_name = nil
|
15
13
|
@@account_number = nil
|
16
14
|
@@last_balance = nil
|
@@ -29,7 +27,6 @@ module NgBankParser
|
|
29
27
|
|
30
28
|
def get_unlocked_pdf? path, password
|
31
29
|
response = PDFUnlocker.unlock(path, password)
|
32
|
-
|
33
30
|
return false unless response
|
34
31
|
if response.include? 'Unlock Failed'
|
35
32
|
return false
|
@@ -40,26 +37,15 @@ module NgBankParser
|
|
40
37
|
@@pdf_reader = PDF::Reader.new(pseudo_file)
|
41
38
|
return true
|
42
39
|
rescue
|
43
|
-
return false
|
40
|
+
return false
|
44
41
|
end
|
45
42
|
end
|
46
43
|
end
|
47
44
|
|
48
45
|
|
49
|
-
def get_raw_transactions
|
50
|
-
@@raw_transactions
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
46
|
def get_transaction_data
|
55
47
|
pages = get_pages @@pdf_reader
|
56
|
-
pages
|
57
|
-
page_text = get_page_text page
|
58
|
-
index = get_transaction_table_index page_text
|
59
|
-
unless index == -1
|
60
|
-
add_to_transactions page_text[index..-1]
|
61
|
-
end
|
62
|
-
end
|
48
|
+
get_all_transactions(pages)
|
63
49
|
end
|
64
50
|
|
65
51
|
|
@@ -104,7 +90,6 @@ module NgBankParser
|
|
104
90
|
|
105
91
|
def contains_transactions_table?
|
106
92
|
get_transaction_data
|
107
|
-
@@raw_transactions
|
108
93
|
end
|
109
94
|
|
110
95
|
|
@@ -157,7 +142,7 @@ module NgBankParser
|
|
157
142
|
|
158
143
|
def error_message msg
|
159
144
|
return {
|
160
|
-
status:
|
145
|
+
status: 400,
|
161
146
|
message: msg
|
162
147
|
}
|
163
148
|
end
|
@@ -165,7 +150,7 @@ module NgBankParser
|
|
165
150
|
|
166
151
|
def send_response data
|
167
152
|
return {
|
168
|
-
status:
|
153
|
+
status: 200,
|
169
154
|
data: data
|
170
155
|
}
|
171
156
|
end
|
@@ -173,10 +158,19 @@ module NgBankParser
|
|
173
158
|
|
174
159
|
private
|
175
160
|
|
176
|
-
def
|
177
|
-
|
178
|
-
|
161
|
+
def get_all_transactions pages
|
162
|
+
raw_transactions = [[]]
|
163
|
+
pages.each do |page|
|
164
|
+
page_text = get_page_text page
|
165
|
+
index = get_transaction_table_index page_text
|
166
|
+
unless index == -1
|
167
|
+
lines = page_text[index..-1]
|
168
|
+
lines.each do |line|
|
169
|
+
raw_transactions << line.strip.split(/\s\s+/)
|
170
|
+
end
|
171
|
+
end
|
179
172
|
end
|
173
|
+
return raw_transactions
|
180
174
|
end
|
181
175
|
|
182
176
|
end
|
@@ -57,13 +57,12 @@ module NgBankParser
|
|
57
57
|
return {
|
58
58
|
status: VALID_ACCOUNT_STATUS,
|
59
59
|
data: {
|
60
|
-
bank_name:
|
60
|
+
bank_name: NgBankParser::Banks::BANK_DEFINITIONS[1][:name],
|
61
61
|
account_number: @account_number,
|
62
62
|
account_name: @account_name,
|
63
63
|
from_date: @start_date,
|
64
64
|
to_date: @end_date,
|
65
65
|
transactions: @transactions
|
66
|
-
# reader: @reader
|
67
66
|
}
|
68
67
|
}
|
69
68
|
end
|
@@ -87,7 +87,7 @@ module NgBankParser
|
|
87
87
|
|
88
88
|
def return_payload
|
89
89
|
return {
|
90
|
-
status:
|
90
|
+
status: 200,
|
91
91
|
data: {
|
92
92
|
bank_name: @bank_name,
|
93
93
|
account_number: @account_number,
|
@@ -101,7 +101,7 @@ module NgBankParser
|
|
101
101
|
|
102
102
|
def invalid_file
|
103
103
|
return {
|
104
|
-
status:
|
104
|
+
status: 400, message: INVALID_FILE_STRING
|
105
105
|
}
|
106
106
|
end
|
107
107
|
|
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.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Opemipo Aikomo
|
@@ -11,118 +11,118 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-
|
14
|
+
date: 2015-12-17 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
|
-
- - ~>
|
20
|
+
- - "~>"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '1.10'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - ~>
|
27
|
+
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '1.10'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rake
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
|
-
- - ~>
|
34
|
+
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: '10.0'
|
37
37
|
type: :development
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - ~>
|
41
|
+
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: '10.0'
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
45
|
name: rspec
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
|
-
- -
|
48
|
+
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: '0'
|
51
51
|
type: :development
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
|
-
- -
|
55
|
+
- - ">="
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '0'
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: nokogiri
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
|
-
- -
|
62
|
+
- - ">="
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: '0'
|
65
65
|
type: :runtime
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- -
|
69
|
+
- - ">="
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
73
|
name: roo
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
75
75
|
requirements:
|
76
|
-
- -
|
76
|
+
- - ">="
|
77
77
|
- !ruby/object:Gem::Version
|
78
78
|
version: '0'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
86
|
- !ruby/object:Gem::Dependency
|
87
87
|
name: pdf-reader
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
|
-
- -
|
90
|
+
- - ">="
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '0'
|
93
93
|
type: :runtime
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
97
|
+
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '0'
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
name: activesupport
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
|
-
- -
|
104
|
+
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: '0'
|
107
107
|
type: :runtime
|
108
108
|
prerelease: false
|
109
109
|
version_requirements: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- -
|
111
|
+
- - ">="
|
112
112
|
- !ruby/object:Gem::Version
|
113
113
|
version: '0'
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: rest-client
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
|
-
- -
|
118
|
+
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
120
|
version: '0'
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
|
-
- -
|
125
|
+
- - ">="
|
126
126
|
- !ruby/object:Gem::Version
|
127
127
|
version: '0'
|
128
128
|
description: This is a simple gem to parse Nigerian bank statements of all formats.
|
@@ -135,8 +135,8 @@ executables: []
|
|
135
135
|
extensions: []
|
136
136
|
extra_rdoc_files: []
|
137
137
|
files:
|
138
|
-
- .gitignore
|
139
|
-
- .rspec
|
138
|
+
- ".gitignore"
|
139
|
+
- ".rspec"
|
140
140
|
- CODE_OF_CONDUCT.md
|
141
141
|
- Gemfile
|
142
142
|
- Gemfile.lock
|
@@ -189,17 +189,17 @@ require_paths:
|
|
189
189
|
- lib
|
190
190
|
required_ruby_version: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- -
|
192
|
+
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
196
|
requirements:
|
197
|
-
- -
|
197
|
+
- - ">="
|
198
198
|
- !ruby/object:Gem::Version
|
199
199
|
version: '0'
|
200
200
|
requirements: []
|
201
201
|
rubyforge_project:
|
202
|
-
rubygems_version: 2.4.
|
202
|
+
rubygems_version: 2.4.5.1
|
203
203
|
signing_key:
|
204
204
|
specification_version: 4
|
205
205
|
summary: This is a simple gem to parse Nigerian bank statements of all formats created
|