aba 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -8
- data/Gemfile +2 -0
- data/Rakefile +2 -0
- data/aba.gemspec +2 -0
- data/lib/aba/batch.rb +26 -14
- data/lib/aba/entry.rb +2 -0
- data/lib/aba/return.rb +2 -0
- data/lib/aba/transaction.rb +3 -0
- data/lib/aba/validations.rb +2 -0
- data/lib/aba/version.rb +3 -1
- data/lib/aba.rb +2 -0
- data/spec/lib/aba/batch_spec.rb +28 -0
- data/spec/lib/aba/return_spec.rb +2 -0
- data/spec/lib/aba/transaction_spec.rb +27 -4
- data/spec/lib/aba/validations_spec.rb +2 -0
- data/spec/lib/aba_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c71962d082a5f069278f49f74ebeba542179be98dfe151ba74f6d348bee4b1f9
|
4
|
+
data.tar.gz: db6ce6a6b139f5ace5c1f386c779d629937c563e26dc541f97dc2f11734bf12e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c8bd0f8e21b4a911a439870df82b5663721d696a1d31a7e33fab9b8477c9d254202560c72952d8effc6df8b275653cf64b1b28daac1123f2ed0ac04b8749f1a
|
7
|
+
data.tar.gz: 204e6e3aa265fce388428b9ead10b510a1094d1030af3c19e1b75016fb00c78c510d31af782c24b9e13fabc0658ec28d42eee931f87ebfde3e92b58d18c30976
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,15 @@
|
|
1
|
-
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## v1.0.2, 25 July 2022
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- Enforce ABA validation:
|
8
|
+
- Amount (in cents) cannot exceed 10 characters.
|
9
|
+
- Total debit amount (in cents) cannot exceed 10 characters.
|
10
|
+
- Total credit amount (in cents) cannot exceed 10 characters.
|
11
|
+
|
12
|
+
## v1.0.1, 11 January 2021
|
2
13
|
|
3
14
|
### BUG FIX
|
4
15
|
|
@@ -8,13 +19,15 @@ Account numbers/alphas validation should be case insensitive
|
|
8
19
|
|
9
20
|
### BREAKING CHANGES
|
10
21
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
22
|
+
- Positive (`n`) and negative (`-n`) values are now treated the same. e.g `5`
|
23
|
+
and `-5` are both processed as `5`, without any signage. To differentiate
|
24
|
+
between a debit and credit, use the correct [Transaction
|
25
|
+
Code](https://github.com/andrba/aba/blob/58446f5b0ef822e9792e9399b4af647319b13515/lib/aba/transaction.rb#L106-L112)
|
26
|
+
- Removed default values for transactions records to avoid generation of
|
27
|
+
potentially incorrect records. Safety first!
|
28
|
+
- Minimum Ruby version is now 2.5
|
16
29
|
|
17
30
|
### NEW FEATURE
|
18
31
|
|
19
|
-
|
20
|
-
|
32
|
+
- You can now add a *return* record to be used when you'd like to return a
|
33
|
+
credit or a debit to another financial institution (OFI).
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/aba.gemspec
CHANGED
data/lib/aba/batch.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Aba
|
2
4
|
class Batch
|
3
5
|
include Aba::Validations
|
@@ -28,6 +30,9 @@ class Aba
|
|
28
30
|
validates_length :process_at, 6
|
29
31
|
validates_integer :process_at, false
|
30
32
|
|
33
|
+
# Totals
|
34
|
+
validates_max_length :debit_total_amount, 10
|
35
|
+
validates_max_length :credit_total_amount, 10
|
31
36
|
|
32
37
|
def initialize(attrs = {}, transactions = [])
|
33
38
|
attrs.each do |key, value|
|
@@ -87,7 +92,10 @@ class Aba
|
|
87
92
|
# Build errors
|
88
93
|
all_errors = {}
|
89
94
|
all_errors[:aba] = self.error_collection unless self.error_collection.empty?
|
90
|
-
entry_error_collection = entries.each_with_index
|
95
|
+
entry_error_collection = entries.each_with_index
|
96
|
+
.map { |t, i| [i, t.error_collection] }
|
97
|
+
.reject { |e| e[1].nil? || e[1].empty? }
|
98
|
+
.to_h
|
91
99
|
all_errors[:entries] = entry_error_collection unless entry_error_collection.empty?
|
92
100
|
|
93
101
|
all_errors unless all_errors.empty?
|
@@ -165,16 +173,8 @@ class Aba
|
|
165
173
|
end
|
166
174
|
|
167
175
|
def batch_control_record
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
entries.each do |entry|
|
172
|
-
if entry.debit?
|
173
|
-
debit_total_amount += Integer(entry.amount).abs
|
174
|
-
else
|
175
|
-
credit_total_amount += Integer(entry.amount).abs
|
176
|
-
end
|
177
|
-
end
|
176
|
+
cached_credit_total_amount = credit_total_amount
|
177
|
+
cached_debit_total_amount = debit_total_amount
|
178
178
|
|
179
179
|
# Record type
|
180
180
|
# Max: 1
|
@@ -194,17 +194,17 @@ class Aba
|
|
194
194
|
# Net total
|
195
195
|
# Max: 10
|
196
196
|
# Char position: 21-30
|
197
|
-
output += (
|
197
|
+
output += (cached_credit_total_amount - cached_debit_total_amount).abs.to_s.rjust(10, "0")
|
198
198
|
|
199
199
|
# Credit Total Amount
|
200
200
|
# Max: 10
|
201
201
|
# Char position: 31-40
|
202
|
-
output +=
|
202
|
+
output += cached_credit_total_amount.to_s.rjust(10, "0")
|
203
203
|
|
204
204
|
# Debit Total Amount
|
205
205
|
# Max: 10
|
206
206
|
# Char position: 41-50
|
207
|
-
output +=
|
207
|
+
output += cached_debit_total_amount.to_s.rjust(10, "0")
|
208
208
|
|
209
209
|
# Reserved
|
210
210
|
# Max: 24
|
@@ -221,5 +221,17 @@ class Aba
|
|
221
221
|
# Char position: 81-120
|
222
222
|
output += " " * 40
|
223
223
|
end
|
224
|
+
|
225
|
+
def credit_total_amount
|
226
|
+
credit_total_amount ||= entries.reject(&:debit?).sum(&method(:entry_amount))
|
227
|
+
end
|
228
|
+
|
229
|
+
def debit_total_amount
|
230
|
+
entries.select(&:debit?).sum(&method(:entry_amount))
|
231
|
+
end
|
232
|
+
|
233
|
+
def entry_amount(entry)
|
234
|
+
entry.amount.to_s[/\A\-?\d+\z/] ? Integer(entry.amount).abs : 0
|
235
|
+
end
|
224
236
|
end
|
225
237
|
end
|
data/lib/aba/entry.rb
CHANGED
data/lib/aba/return.rb
CHANGED
data/lib/aba/transaction.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Aba
|
2
4
|
class Transaction < Entry
|
3
5
|
include Aba::Validations
|
@@ -20,6 +22,7 @@ class Aba
|
|
20
22
|
|
21
23
|
# Amount
|
22
24
|
validates_integer :amount
|
25
|
+
validates_max_length :amount, 10
|
23
26
|
|
24
27
|
# Account Name
|
25
28
|
validates_max_length :account_name, 32
|
data/lib/aba/validations.rb
CHANGED
data/lib/aba/version.rb
CHANGED
data/lib/aba.rb
CHANGED
data/spec/lib/aba/batch_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# encoding: UTF-8
|
2
4
|
|
3
5
|
require "spec_helper"
|
@@ -129,5 +131,31 @@ describe Aba::Batch do
|
|
129
131
|
expect(batch.errors).to eq(:entries => { 1 => ["amount must be a number"], 2 => ["amount must be a number"] })
|
130
132
|
end
|
131
133
|
end
|
134
|
+
|
135
|
+
context "with an invalid credit total (exceeding 10 characters)" do
|
136
|
+
let(:transactions_attributes) do
|
137
|
+
[
|
138
|
+
{amount: 9999999999, transaction_code: 50},
|
139
|
+
{amount: 9999999999, transaction_code: 50},
|
140
|
+
]
|
141
|
+
end
|
142
|
+
|
143
|
+
it "reports the errors" do
|
144
|
+
expect(batch.errors).to include(aba: ["credit_total_amount length must not exceed 10 characters"])
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context "with an invalid debit total amount (exceeding 10 characters)" do
|
149
|
+
let(:transactions_attributes) do
|
150
|
+
[
|
151
|
+
{amount: 9999999999, transaction_code: 13},
|
152
|
+
{amount: 9999999999, transaction_code: 13},
|
153
|
+
]
|
154
|
+
end
|
155
|
+
|
156
|
+
it "reports the errors" do
|
157
|
+
expect(batch.errors).to include(aba: ["debit_total_amount length must not exceed 10 characters"])
|
158
|
+
end
|
159
|
+
end
|
132
160
|
end
|
133
161
|
end
|
data/spec/lib/aba/return_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# encoding: UTF-8
|
2
4
|
|
3
5
|
require "spec_helper"
|
@@ -42,10 +44,31 @@ describe Aba::Transaction do
|
|
42
44
|
expect(subject.valid?).to eq true
|
43
45
|
end
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
47
|
+
context "without bsb param" do
|
48
|
+
before do
|
49
|
+
transaction_params.delete(:bsb)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "is invalid" do
|
53
|
+
expect(subject.valid?).to eq false
|
54
|
+
expect(subject.errors).to eq ["bsb format is incorrect"]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe ":amount" do
|
59
|
+
subject(:transaction) { Aba::Transaction.new(transaction_params.merge(amount: amount)) }
|
60
|
+
|
61
|
+
context "with 10 digits" do
|
62
|
+
let(:amount) { "1234567890" }
|
63
|
+
|
64
|
+
it { is_expected.to be_valid }
|
65
|
+
end
|
66
|
+
|
67
|
+
context "with 11 digits" do
|
68
|
+
let(:amount) { "12345678901" }
|
69
|
+
|
70
|
+
it { is_expected.not_to be_valid }
|
71
|
+
end
|
49
72
|
end
|
50
73
|
end
|
51
74
|
end
|
data/spec/lib/aba_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey Bazhutkin
|
8
8
|
- Trevor Wistaff
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-07-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -87,7 +87,7 @@ homepage: https://github.com/andrba/aba
|
|
87
87
|
licenses:
|
88
88
|
- MIT
|
89
89
|
metadata: {}
|
90
|
-
post_install_message:
|
90
|
+
post_install_message:
|
91
91
|
rdoc_options: []
|
92
92
|
require_paths:
|
93
93
|
- lib
|
@@ -102,8 +102,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
requirements: []
|
105
|
-
rubygems_version: 3.
|
106
|
-
signing_key:
|
105
|
+
rubygems_version: 3.1.6
|
106
|
+
signing_key:
|
107
107
|
specification_version: 4
|
108
108
|
summary: ABA File Generator
|
109
109
|
test_files:
|