bankserv 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/bankserv/engine.rb +8 -4
- data/lib/bankserv/service.rb +17 -1
- data/lib/bankserv/transmission/input_document.rb +15 -2
- data/lib/bankserv/version.rb +1 -1
- data/lib/generators/active_record/templates/migration.rb +2 -14
- data/spec/internal/db/schema.rb +1 -0
- data/spec/lib/bankserv/engine/engine_spec.rb +26 -24
- metadata +13 -13
data/lib/bankserv/engine.rb
CHANGED
@@ -67,9 +67,9 @@ module Bankserv
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def process_input_files
|
70
|
-
|
70
|
+
input_services.each do |bankserv_service|
|
71
71
|
begin
|
72
|
-
next if self.expecting_reply_file?
|
72
|
+
next if self.expecting_reply_file?(bankserv_service)
|
73
73
|
|
74
74
|
if document = Bankserv::InputDocument.generate!(bankserv_service)
|
75
75
|
@logs[:input_files] << "Input Document created with id: #{document.id}" if document
|
@@ -85,6 +85,10 @@ module Bankserv
|
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
|
+
def input_services
|
89
|
+
Bankserv::Service.active.select(&:can_transmit?)
|
90
|
+
end
|
91
|
+
|
88
92
|
def write_file!(document)
|
89
93
|
begin
|
90
94
|
transmission = Absa::H2h::Transmission::Document.build([document.to_hash])
|
@@ -113,8 +117,8 @@ module Bankserv
|
|
113
117
|
FileUtils.mv(file, "#{Bankserv::Engine.archive_directory}/#{year}/#{month}/")
|
114
118
|
end
|
115
119
|
|
116
|
-
def expecting_reply_file?
|
117
|
-
Bankserv::Document.where(type: 'input', reply_status: nil, processed: true).count > 0
|
120
|
+
def expecting_reply_file?(bankserv_service)
|
121
|
+
Bankserv::Document.where(type: 'input', reply_status: nil, processed: true, client_code: bankserv_service.client_code).count > 0
|
118
122
|
end
|
119
123
|
|
120
124
|
def finish!
|
data/lib/bankserv/service.rb
CHANGED
@@ -50,6 +50,10 @@ module Bankserv
|
|
50
50
|
def is_test_env?
|
51
51
|
config[:transmission_status] == "T"
|
52
52
|
end
|
53
|
+
|
54
|
+
def can_transmit?
|
55
|
+
false
|
56
|
+
end
|
53
57
|
|
54
58
|
end
|
55
59
|
|
@@ -59,6 +63,10 @@ module Bankserv
|
|
59
63
|
params.merge!(test: true) if is_test_env?
|
60
64
|
Request.create!(params)
|
61
65
|
end
|
66
|
+
|
67
|
+
def can_transmit?
|
68
|
+
true
|
69
|
+
end
|
62
70
|
end
|
63
71
|
|
64
72
|
class CreditService < Service
|
@@ -66,7 +74,11 @@ module Bankserv
|
|
66
74
|
params.merge!(type: 'credit', service_id: id)
|
67
75
|
params.merge!(test: true) if is_test_env?
|
68
76
|
Request.create!(params)
|
69
|
-
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def can_transmit?
|
80
|
+
true
|
81
|
+
end
|
70
82
|
end
|
71
83
|
|
72
84
|
class AHVService < Service
|
@@ -74,6 +86,10 @@ module Bankserv
|
|
74
86
|
params.merge!(type: 'ahv', service_id: id)
|
75
87
|
params.merge!(test: true) if is_test_env?
|
76
88
|
Request.create!(params)
|
89
|
+
end
|
90
|
+
|
91
|
+
def can_transmit?
|
92
|
+
true
|
77
93
|
end
|
78
94
|
end
|
79
95
|
|
@@ -9,7 +9,13 @@ class Bankserv::InputDocument < Bankserv::Document
|
|
9
9
|
|
10
10
|
raise "Expected a document set" unless options[:type] == "document"
|
11
11
|
|
12
|
-
document = new(
|
12
|
+
document = new(
|
13
|
+
type: 'input',
|
14
|
+
transmission_number: options[:data][0][:data][:transmission_no],
|
15
|
+
transmission_status: options[:data][0][:data][:rec_status],
|
16
|
+
client_code: options[:data][0][:data][:client_code]
|
17
|
+
)
|
18
|
+
|
13
19
|
document.set = Bankserv::Set.from_hash(options)
|
14
20
|
document.set.document = document # whaaaaaa?
|
15
21
|
document.save!
|
@@ -49,7 +55,14 @@ class Bankserv::InputDocument < Bankserv::Document
|
|
49
55
|
raise "Transmission status not specified" if transmission_status.nil?
|
50
56
|
options[:transmission_no] ||= bankserv_service.config[:transmission_number]
|
51
57
|
|
52
|
-
document = new(
|
58
|
+
document = new(
|
59
|
+
transmission_status: transmission_status,
|
60
|
+
rec_status: options[:rec_status],
|
61
|
+
type: 'input',
|
62
|
+
transmission_number: options[:transmission_no],
|
63
|
+
client_code: bankserv_service.client_code
|
64
|
+
)
|
65
|
+
|
53
66
|
document.set = Bankserv::Transmission::UserSet::Document.generate(options.merge(rec_status: document.rec_status))
|
54
67
|
document.set.document = document # whaaaaaa?
|
55
68
|
|
data/lib/bankserv/version.rb
CHANGED
@@ -22,23 +22,10 @@ class CreateBankservTables < ActiveRecord::Migration
|
|
22
22
|
t.string :client_code
|
23
23
|
t.text :config
|
24
24
|
t.timestamps
|
25
|
-
#
|
26
|
-
# t.boolean :active, :default => false
|
27
|
-
# t.string :client_code
|
28
|
-
# t.string :client_name
|
29
|
-
# t.string :client_abbreviated_name
|
30
|
-
# t.string :user_code
|
31
|
-
# t.string :department_code
|
32
|
-
# t.integer :transmission_number
|
33
|
-
# t.integer :user_generation_number
|
34
|
-
# t.string :internal_branch_code
|
35
|
-
# t.boolean :live_env, :default => false
|
36
|
-
# t.timestamps
|
37
|
-
# t.integer :eft_sequence_number
|
38
|
-
# t.datetime :eft_sequence_number_updated_at #refactor later
|
39
25
|
end
|
40
26
|
|
41
27
|
create_table :bankserv_requests do |t|
|
28
|
+
t.integer :service_id
|
42
29
|
t.string :type
|
43
30
|
t.text :data
|
44
31
|
t.boolean :processed, :default => false
|
@@ -98,6 +85,7 @@ class CreateBankservTables < ActiveRecord::Migration
|
|
98
85
|
end
|
99
86
|
|
100
87
|
create_table :bankserv_documents do |t|
|
88
|
+
t.string :client_code
|
101
89
|
t.string :type
|
102
90
|
t.references :set
|
103
91
|
t.boolean :processed, :default => false
|
data/spec/internal/db/schema.rb
CHANGED
@@ -40,10 +40,23 @@ describe Bankserv::Engine do
|
|
40
40
|
|
41
41
|
end
|
42
42
|
|
43
|
+
it "should retrieve services which can transmit input documents" do
|
44
|
+
debit_service = Bankserv::DebitService.register(client_code: '10', client_name: "RCTEST", client_abbreviated_name: 'RCTEST', user_code: "9534", transmission_status: "L", transmission_number: "1")
|
45
|
+
credit_service = Bankserv::CreditService.register(client_code: '12345', client_name: "RCTEST", client_abbreviated_name: 'RCTEST', user_code: "9534", transmission_status: "L", transmission_number: "1")
|
46
|
+
ahv_service = Bankserv::AHVService.register(client_code: '12345', internal_branch_code: '632005', department_code: "506", client_name: "TESTTEST", client_abbreviated_name: 'TESTTEST', generation_number: 1, transmission_status: "L", transmission_number: "1")
|
47
|
+
statement_service = Bankserv::StatementService.register(client_code: '12346', client_name: "TESTTEST", client_abbreviated_name: 'TESTTEST', user_code: "9999", generation_number: 1, transmission_status: "L", transmission_number: "1")
|
48
|
+
|
49
|
+
input_services = Bankserv::Engine.new.input_services
|
50
|
+
input_services.include?(debit_service).should be_true
|
51
|
+
input_services.include?(credit_service).should be_true
|
52
|
+
input_services.include?(ahv_service).should be_true
|
53
|
+
input_services.include?(statement_service).should be_false
|
54
|
+
end
|
55
|
+
|
43
56
|
context "Testing individual methods of engine" do
|
44
57
|
|
45
58
|
before(:all) do
|
46
|
-
Bankserv::DebitService.register(client_code: '
|
59
|
+
@debit_service = Bankserv::DebitService.register(client_code: '10', client_name: "RCTEST", client_abbreviated_name: 'RCTEST', user_code: "9534", transmission_status: "L", transmission_number: "1")
|
47
60
|
t = Time.local(2012, 1, 23, 10, 5, 0)
|
48
61
|
Timecop.travel(t)
|
49
62
|
file_contents = File.open("./spec/examples/eft_input_with_2_sets.txt", "rb").read
|
@@ -67,7 +80,7 @@ describe Bankserv::Engine do
|
|
67
80
|
end
|
68
81
|
|
69
82
|
it "should be expecting a reply file" do
|
70
|
-
@engine.expecting_reply_file
|
83
|
+
@engine.expecting_reply_file?(@debit_service).should be_true
|
71
84
|
end
|
72
85
|
|
73
86
|
it "should be able to return a list of reply files" do
|
@@ -81,7 +94,7 @@ describe Bankserv::Engine do
|
|
81
94
|
it "should be able to process reply files" do
|
82
95
|
@engine.process_reply_files
|
83
96
|
Bankserv::Document.first.reply_status.should == "ACCEPTED"
|
84
|
-
@engine.expecting_reply_file
|
97
|
+
@engine.expecting_reply_file?(@debit_service).should be_false
|
85
98
|
end
|
86
99
|
|
87
100
|
it "should be able to process output files" do
|
@@ -123,7 +136,7 @@ describe Bankserv::Engine do
|
|
123
136
|
@engine.process_input_files
|
124
137
|
@document = Bankserv::Document.last
|
125
138
|
@document.processed.should be_true
|
126
|
-
@engine.expecting_reply_file
|
139
|
+
@engine.expecting_reply_file?(@service).should be_true
|
127
140
|
end
|
128
141
|
|
129
142
|
it "should write a file to the input directory" do
|
@@ -142,44 +155,33 @@ describe Bankserv::Engine do
|
|
142
155
|
@debit_service = Bankserv::DebitService.register(client_code: '12346', client_name: "TESTTEST", client_abbreviated_name: 'TESTTEST', user_code: "9999", generation_number: 1, transmission_status: "L", transmission_number: "1")
|
143
156
|
@credit_service = Bankserv::CreditService.register(client_code: '12347', client_name: "TESTTEST", client_abbreviated_name: 'TESTTEST', user_code: "9999", generation_number: 1, transmission_status: "L", transmission_number: "1")
|
144
157
|
Bankserv::EngineConfiguration.create!(interval_in_minutes: 15, input_directory: @tmpdir, output_directory: @tmpdir, archive_directory: @tmpdir)
|
145
|
-
|
146
|
-
|
147
|
-
it "should process ahv requests" do
|
158
|
+
|
159
|
+
# test that engine can process different service types at once (generate 3 files with one run)
|
148
160
|
Bankserv::AccountHolderVerification.should_receive(:generate_reference_number).exactly(8).times.and_return("AHV67","AHV68","AHV69","AHV70","AHV71","AHV72","AHV73","AHV74")
|
149
161
|
create_ahv_requests_scenario(@ahv_service)
|
162
|
+
create_debit_requests_scenario(@debit_service)
|
163
|
+
create_credit_requests_scenario(@credit_service)
|
164
|
+
|
150
165
|
e = Bankserv::Engine.new
|
151
|
-
e.should_receive(:generate_input_file_name).and_return("harry.txt")
|
166
|
+
e.should_receive(:generate_input_file_name).and_return("harry.txt", "sally.txt", "molly.txt")
|
152
167
|
e.process!
|
153
|
-
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should process ahv requests" do
|
154
171
|
expected_string = File.open("./spec/examples/INPUT.120410144410.txt", "rb").read
|
155
172
|
got_string = File.open(@tmpdir + '/harry.txt', "rb").read
|
156
|
-
|
157
173
|
got_string.should == expected_string
|
158
174
|
end
|
159
175
|
|
160
176
|
it "should process debit requests" do
|
161
|
-
create_debit_requests_scenario(@debit_service)
|
162
|
-
|
163
|
-
e = Bankserv::Engine.new
|
164
|
-
e.should_receive(:generate_input_file_name).and_return("sally.txt")
|
165
|
-
e.process!
|
166
|
-
|
167
177
|
expected_string = File.open("./spec/examples/INPUT.120411110604.txt", "rb").read
|
168
178
|
got_string = File.open(@tmpdir + '/sally.txt', "rb").read
|
169
|
-
|
170
179
|
got_string.should == expected_string
|
171
180
|
end
|
172
181
|
|
173
182
|
it "should process credit requests" do
|
174
|
-
create_credit_requests_scenario(@credit_service)
|
175
|
-
|
176
|
-
e = Bankserv::Engine.new
|
177
|
-
e.should_receive(:generate_input_file_name).and_return("molly.txt")
|
178
|
-
e.process!
|
179
|
-
|
180
183
|
expected_string = File.open("./spec/examples/INPUT.120411124123.txt", "rb").read
|
181
184
|
got_string = File.open(@tmpdir + '/molly.txt', "rb").read
|
182
|
-
|
183
185
|
got_string.should == expected_string
|
184
186
|
end
|
185
187
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bankserv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ date: 2012-04-16 00:00:00.000000000Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
17
|
-
requirement: &
|
17
|
+
requirement: &70306756830520 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70306756830520
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: activerecord
|
28
|
-
requirement: &
|
28
|
+
requirement: &70306756829960 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '3.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70306756829960
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: i18n
|
39
|
-
requirement: &
|
39
|
+
requirement: &70306756829340 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70306756829340
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: absa-h2h
|
50
|
-
requirement: &
|
50
|
+
requirement: &70306756828780 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: 0.1.1
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70306756828780
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: absa-esd
|
61
|
-
requirement: &
|
61
|
+
requirement: &70306756828140 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ~>
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: 0.0.2
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70306756828140
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: combustion
|
72
|
-
requirement: &
|
72
|
+
requirement: &70306756827560 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
version: 0.3.1
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70306756827560
|
81
81
|
description: ! "This engine allows users to inject requests into a queue to be processed.
|
82
82
|
\n \n The queue handles bank account validations, credit payments,
|
83
83
|
debit orders\n and collecting bank statements. "
|