ach_client 3.0.0 → 4.0.0
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/.ruby-version +1 -1
- data/.tool-versions +1 -1
- data/README.md +2 -1
- data/ach_client.gemspec +5 -3
- data/lib/ach_client/providers/abstract/company_info.rb +2 -3
- data/lib/ach_client/providers/sftp/ach_batch.rb +9 -8
- data/lib/ach_client/providers/sftp/ach_status_checker.rb +4 -4
- data/lib/ach_client/providers/sftp/ach_transaction.rb +1 -1
- data/lib/ach_client/providers/sftp/nacha_provider.rb +7 -0
- data/lib/ach_client/providers/soap/ach_works/response_record_processor.rb +4 -4
- data/lib/ach_client/version.rb +1 -1
- metadata +11 -12
- data/.rubocop.yml +0 -1156
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d054803f625f392d4b5638ceabf174fde8fd2847f0472c7a03e2d7672dd0c81e
|
4
|
+
data.tar.gz: 401b32b2f18c07b93583807844ec14e2ae1f41143393fa6797db72c8b7ce8c22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2214c86385c3476239bc4aa01705ce63a95c8d2b1e3fffdb4d884cde3779eeb4f2b76c898548833fc0341a50909ab64d2edeba9f96c07635f25ac730e5f4a49
|
7
|
+
data.tar.gz: 6eca53351b052f89e7be43c53dbf8a33eadb7337205641c07d30e75cce455191e9f0bc2d97b57e244eb6344d7300bf809ff50df972fb7db0c223772fb1a6410e
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.1.3
|
data/.tool-versions
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby
|
1
|
+
ruby 3.1.3
|
data/README.md
CHANGED
@@ -70,7 +70,7 @@ AchClient::Provider::AchTransaction.new(
|
|
70
70
|
# The merchant's account type (see account types note above)
|
71
71
|
account_type: AchClient::AccountTypes::BusinessChecking,
|
72
72
|
# The amount of the ACH transaction, should be positive
|
73
|
-
amount: BigDecimal
|
73
|
+
amount: BigDecimal('575.45'),
|
74
74
|
# The date on which you would like the transaction to take effect.
|
75
75
|
# Beware that some providers may use this field to charge you extra for
|
76
76
|
# same-day ACH ( a recent feature for ACH providers )
|
@@ -337,6 +337,7 @@ these new classes using the same interface described above for the API providers
|
|
337
337
|
| `outgoing_path` | Path on the remote server where bank has asked you to dump your NACHAs |
|
338
338
|
| `incoming_path` | Path on the remote server where the bank leaves confirmation/return files |
|
339
339
|
| `file_naming_strategy` | Function to define filenames for the NACHA files |
|
340
|
+
| `transmission_datetime_calculator` | (optional) Function to define File Creation Date header value - defaults to `-> { Time.now }` - note that you may wish to override this to use a non-UTC zone |
|
340
341
|
|
341
342
|
#### File Naming Strategy
|
342
343
|
|
data/ach_client.gemspec
CHANGED
@@ -28,20 +28,22 @@ Gem::Specification.new do |spec|
|
|
28
28
|
'config'
|
29
29
|
]
|
30
30
|
|
31
|
+
#spec.required_ruby_version = '>= 2.7.0'
|
32
|
+
|
31
33
|
# NACHA library
|
32
34
|
spec.add_dependency 'ach', '~> 0'
|
33
35
|
|
34
36
|
# Handy ruby behavior from rails
|
35
|
-
spec.add_dependency 'activesupport', '
|
37
|
+
spec.add_dependency 'activesupport', '>= 6.0'
|
36
38
|
|
37
39
|
# SFTP client (for Bank providers)
|
38
40
|
spec.add_dependency 'net-sftp'
|
39
41
|
|
40
42
|
# SOAP client (for AchWorks and ICheckGateway clients)
|
41
|
-
spec.add_dependency 'savon', '~> 2'
|
43
|
+
spec.add_dependency 'savon', '~> 2.12.0'
|
42
44
|
|
43
45
|
# Asynchronocity w/out extra infrastucture dependency (database/redis)
|
44
|
-
spec.add_dependency 'sucker_punch', '~>
|
46
|
+
spec.add_dependency 'sucker_punch', '~> 3'
|
45
47
|
|
46
48
|
spec.add_development_dependency 'codeclimate-test-reporter'
|
47
49
|
spec.add_development_dependency 'minitest-reporters'
|
@@ -17,11 +17,10 @@ module AchClient
|
|
17
17
|
end
|
18
18
|
|
19
19
|
private_class_method def self.build_from_config(args)
|
20
|
-
|
21
|
-
args.map do |arg|
|
20
|
+
args_hash = args.map do |arg|
|
22
21
|
{arg => self.to_s.deconstantize.constantize.send(arg)}
|
23
22
|
end.reduce(&:merge)
|
24
|
-
)
|
23
|
+
self.new(**args_hash)
|
25
24
|
end
|
26
25
|
end
|
27
26
|
end
|
@@ -12,15 +12,15 @@ module AchClient
|
|
12
12
|
# The filename used for the batch
|
13
13
|
# @return [String] filename to use
|
14
14
|
def batch_file_name
|
15
|
-
self.class.
|
15
|
+
self.class.module_parent.file_naming_strategy.(@batch_number)
|
16
16
|
end
|
17
17
|
|
18
18
|
# Sends the batch to SFTP provider
|
19
19
|
# @return [Array<String>]
|
20
20
|
def do_send_batch
|
21
|
-
self.class.
|
21
|
+
self.class.module_parent.write_remote_file(
|
22
22
|
file_path: File.join(
|
23
|
-
self.class.
|
23
|
+
self.class.module_parent.outgoing_path,
|
24
24
|
batch_file_name
|
25
25
|
),
|
26
26
|
file_body: cook_some_nachas.to_s
|
@@ -62,9 +62,10 @@ module AchClient
|
|
62
62
|
:immediate_destination,
|
63
63
|
:immediate_destination_name,
|
64
64
|
:immediate_origin,
|
65
|
-
:immediate_origin_name
|
65
|
+
:immediate_origin_name,
|
66
|
+
:transmission_datetime
|
66
67
|
].each do |attribute|
|
67
|
-
file_header.send("#{attribute}=", self.class.
|
68
|
+
file_header.send("#{attribute}=", self.class.module_parent.send(attribute))
|
68
69
|
end
|
69
70
|
file_header
|
70
71
|
end
|
@@ -79,14 +80,14 @@ module AchClient
|
|
79
80
|
batch_header = batch.header
|
80
81
|
batch_header.company_name = originator_name
|
81
82
|
batch_header.company_identification =
|
82
|
-
self.class.
|
83
|
+
self.class.module_parent.company_identification
|
83
84
|
batch_header.standard_entry_class_code = sec_code
|
84
85
|
batch_header.company_entry_description =
|
85
|
-
self.class.
|
86
|
+
self.class.module_parent.company_entry_description
|
86
87
|
batch_header.company_descriptive_date = effective_entry_date
|
87
88
|
batch_header.effective_entry_date = effective_entry_date
|
88
89
|
batch_header.originating_dfi_identification =
|
89
|
-
self.class.
|
90
|
+
self.class.module_parent.originating_dfi_identification
|
90
91
|
transactions.each do |transaction|
|
91
92
|
batch.entries << transaction.to_entry_detail
|
92
93
|
end
|
@@ -22,7 +22,7 @@ module AchClient
|
|
22
22
|
# values
|
23
23
|
def self.in_range(start_date:, end_date:)
|
24
24
|
in_range = {}
|
25
|
-
self.
|
25
|
+
self.module_parent.with_sftp_connection do |connection|
|
26
26
|
in_range = process_files(
|
27
27
|
files_in_range(
|
28
28
|
connection: connection,
|
@@ -92,7 +92,7 @@ module AchClient
|
|
92
92
|
end
|
93
93
|
|
94
94
|
private_class_method def self.inbox_path_to(filename)
|
95
|
-
"#{self.
|
95
|
+
"#{self.module_parent.incoming_path}/#{filename}"
|
96
96
|
end
|
97
97
|
|
98
98
|
private_class_method def self.files_in_range(
|
@@ -101,7 +101,7 @@ module AchClient
|
|
101
101
|
end_date: nil
|
102
102
|
)
|
103
103
|
# Get info on all files - equivalent to `ls`
|
104
|
-
connection.dir.entries(self.
|
104
|
+
connection.dir.entries(self.module_parent.incoming_path)
|
105
105
|
.select do |file|
|
106
106
|
last_modified_time = Time.at(file.attributes.mtime) - 1.minute
|
107
107
|
# Filter to files modified in date range
|
@@ -148,7 +148,7 @@ module AchClient
|
|
148
148
|
|
149
149
|
private_class_method def self.most_recent_files
|
150
150
|
files = []
|
151
|
-
self.
|
151
|
+
self.module_parent.with_sftp_connection do |connection|
|
152
152
|
files = files_in_range(
|
153
153
|
connection: connection,
|
154
154
|
start_date: last_most_recent_check_date(connection: connection)
|
@@ -20,7 +20,7 @@ module AchClient
|
|
20
20
|
entry.individual_id_number = remove_newlines(external_ach_id) # Doesn't need to be a number
|
21
21
|
entry.individual_name = remove_newlines(merchant_name)
|
22
22
|
entry.originating_dfi_identification = remove_newlines(
|
23
|
-
self.class.
|
23
|
+
self.class.module_parent.originating_dfi_identification
|
24
24
|
)
|
25
25
|
entry.trace_number = remove_non_digits(external_ach_id).to_i # Must be number
|
26
26
|
entry
|
@@ -25,6 +25,13 @@ module AchClient
|
|
25
25
|
# @return [String] originating_dfi_identification refers to your bank?
|
26
26
|
# originating_dfi => "Originating Depository Financial Institution"
|
27
27
|
class_attribute :originating_dfi_identification
|
28
|
+
|
29
|
+
# @return [Proc<Time>] method to calculate the File Creation Date for NACHA header
|
30
|
+
class_attribute :transmission_datetime_calculator, default: -> { Time.now }
|
31
|
+
|
32
|
+
def self.transmission_datetime
|
33
|
+
transmission_datetime_calculator.call
|
34
|
+
end
|
28
35
|
end
|
29
36
|
end
|
30
37
|
end
|
@@ -30,7 +30,7 @@ module AchClient
|
|
30
30
|
# @return [AchClient::ProcessingAchResponse] processing response
|
31
31
|
def self.process_1SNT(record)
|
32
32
|
AchClient::ProcessingAchResponse.new(
|
33
|
-
amount: BigDecimal
|
33
|
+
amount: BigDecimal(record[:trans_amount]),
|
34
34
|
date: record[:action_date]
|
35
35
|
)
|
36
36
|
end
|
@@ -40,7 +40,7 @@ module AchClient
|
|
40
40
|
# @return [AchClient::SettledAchResponse] settled response
|
41
41
|
def self.process_2STL(record)
|
42
42
|
AchClient::SettledAchResponse.new(
|
43
|
-
amount: BigDecimal
|
43
|
+
amount: BigDecimal(record[:trans_amount]),
|
44
44
|
date: record[:action_date]
|
45
45
|
)
|
46
46
|
end
|
@@ -51,7 +51,7 @@ module AchClient
|
|
51
51
|
# @return [AchClient::ReturnedAchResponse] returned response
|
52
52
|
def self.process_3RET(record)
|
53
53
|
AchClient::ReturnedAchResponse.new(
|
54
|
-
amount: BigDecimal
|
54
|
+
amount: BigDecimal(record[:trans_amount]),
|
55
55
|
date: record[:action_date],
|
56
56
|
return_code: AchClient::ReturnCodes.find_by(
|
57
57
|
code: record[:action_detail][0..2]
|
@@ -75,7 +75,7 @@ module AchClient
|
|
75
75
|
# @return [AchClient::CorrectedAchResponse] corrected response
|
76
76
|
def self.process_5COR(record)
|
77
77
|
AchClient::CorrectedAchResponse.new(
|
78
|
-
amount: BigDecimal
|
78
|
+
amount: BigDecimal(record[:trans_amount]),
|
79
79
|
date: record[:action_date],
|
80
80
|
return_code: AchClient::ReturnCodes.find_by(
|
81
81
|
code: record[:action_detail][0..2]
|
data/lib/ach_client/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ach_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Cotter
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ach
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '6'
|
33
|
+
version: '6.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '6'
|
40
|
+
version: '6.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: net-sftp
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,28 +58,28 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 2.12.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 2.12.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sucker_punch
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '3'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '3'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: codeclimate-test-reporter
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -258,7 +258,6 @@ files:
|
|
258
258
|
- ".codeclimate.yml"
|
259
259
|
- ".github/CODEOWNERS"
|
260
260
|
- ".gitignore"
|
261
|
-
- ".rubocop.yml"
|
262
261
|
- ".ruby-version"
|
263
262
|
- ".tool-versions"
|
264
263
|
- ".tool-versions-e"
|
@@ -349,7 +348,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
349
348
|
- !ruby/object:Gem::Version
|
350
349
|
version: '0'
|
351
350
|
requirements: []
|
352
|
-
rubygems_version: 3.
|
351
|
+
rubygems_version: 3.3.26
|
353
352
|
signing_key:
|
354
353
|
specification_version: 4
|
355
354
|
summary: Adapter to interact with various ACH service providers
|