aba 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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:
|