metro_2 1.2.3 → 1.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +12 -0
- data/lib/metro_2.rb +26 -19
- data/lib/metro_2/version.rb +3 -1
- data/metro_2.gemspec +14 -13
- data/spec/records/header_segment_spec.rb +1 -1
- 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: 53c7a7abd63b475add82aa238e4cb634767b38ca2c0f49f98422c3de53485c59
|
4
|
+
data.tar.gz: 7043dbe7604d64c8b5db6b3fa9062c2b169e701a033a27ea480ab5b2ca2fa31c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 571c5c7704912cf4f984a2bb4f2c32e691afdc70a465c9b88c876b2a1fa332d93a5b62fea1b2451aff42dd9ca7ebe3953473ad41becbfddd714e77b55271bb83
|
7
|
+
data.tar.gz: 1d111fde7dd76134d9722d5ef164414c3b0b3eb46362fc76ee267b6cc55912f5a2af06ff6aaf2a372501cdf71a967d1b2b22a6986be4faa67beebe910659c488
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# The behavior of RuboCop can be controlled via the .rubocop.yml
|
2
|
+
# configuration file. It makes it possible to enable/disable
|
3
|
+
# certain cops (checks) and to alter their behavior if they accept
|
4
|
+
# any parameters. The file can be placed either in your home
|
5
|
+
# directory or in some project directory.
|
6
|
+
#
|
7
|
+
# RuboCop will start looking for the configuration file in the directory
|
8
|
+
# where the inspected file is and continue its way up to the root directory.
|
9
|
+
#
|
10
|
+
# See https://github.com/rubocop-hq/rubocop/blob/master/manual/configuration.md
|
11
|
+
Layout/LineLength:
|
12
|
+
Max: 100
|
data/lib/metro_2.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'metro_2/version'
|
2
4
|
|
3
5
|
module Metro2
|
4
|
-
|
5
6
|
PORTFOLIO_TYPE = {
|
6
7
|
line_of_credit: 'C',
|
7
8
|
installment: 'I',
|
@@ -11,6 +12,7 @@ module Metro2
|
|
11
12
|
}.freeze
|
12
13
|
|
13
14
|
ACCOUNT_TYPE = {
|
15
|
+
auto: '00',
|
14
16
|
unsecured: '01',
|
15
17
|
education: '12'
|
16
18
|
# TODO: add other account types
|
@@ -24,18 +26,25 @@ module Metro2
|
|
24
26
|
}.freeze
|
25
27
|
|
26
28
|
SPECIAL_COMMENT_CODE = {
|
29
|
+
election_of_remedy: 'I',
|
30
|
+
paid_through_insurance: 'AB',
|
27
31
|
partial_payment_agreement: 'AC',
|
28
32
|
purchased_by_another_company: 'AH',
|
33
|
+
voluntarily_surrendered: 'AO',
|
29
34
|
paid_in_full_less_than_full_balance: 'AU',
|
30
35
|
affected_by_natural_or_declared_disaster: 'AW',
|
36
|
+
redeemed_or_reinstated_repossession: 'AZ',
|
37
|
+
involuntary_repossession: 'BI',
|
38
|
+
involuntary_repossession_obligation_satisfied: 'BJ',
|
39
|
+
involuntary_repossession_balance_owing: 'BK',
|
31
40
|
loan_modified: 'CO',
|
32
|
-
forbearance: 'CP'
|
41
|
+
forbearance: 'CP'
|
33
42
|
# TODO: add other special comment codes
|
34
43
|
}.freeze
|
35
44
|
|
36
45
|
COMPLIANCE_CONDITION_CODE = {
|
37
46
|
in_dispute: 'XB',
|
38
|
-
previously_in_dispute_now_resolved: 'XH'
|
47
|
+
previously_in_dispute_now_resolved: 'XH'
|
39
48
|
# TODO: add other compliance condition codes
|
40
49
|
}.freeze
|
41
50
|
|
@@ -161,8 +170,8 @@ module Metro2
|
|
161
170
|
withdrawn_ch7: 'M',
|
162
171
|
withdrawn_ch11: 'N',
|
163
172
|
withdrawn_ch12: 'O',
|
164
|
-
withdrawn_ch13: 'P'
|
165
|
-
}
|
173
|
+
withdrawn_ch13: 'P'
|
174
|
+
}.freeze
|
166
175
|
|
167
176
|
# K2 Segment constants
|
168
177
|
PURCHASED_FROM_SOLD_TO_INDICATOR = {
|
@@ -171,10 +180,10 @@ module Metro2
|
|
171
180
|
remove_previous: 9
|
172
181
|
}.freeze
|
173
182
|
|
174
|
-
ALPHANUMERIC = /\A([[:alnum:]]|\s)+\z
|
175
|
-
ALPHANUMERIC_PLUS_DASH = /\A([[:alnum:]]|\s|\-)+\z
|
176
|
-
ALPHANUMERIC_PLUS_DOT_DASH_SLASH =
|
177
|
-
NUMERIC = /\A\d+\.?\d*\z
|
183
|
+
ALPHANUMERIC = /\A([[:alnum:]]|\s)+\z/.freeze
|
184
|
+
ALPHANUMERIC_PLUS_DASH = /\A([[:alnum:]]|\s|\-)+\z/.freeze
|
185
|
+
ALPHANUMERIC_PLUS_DOT_DASH_SLASH = %r{\A([[:alnum:]]|\s|\-|\.|\\|/)+\z}.freeze
|
186
|
+
NUMERIC = /\A\d+\.?\d*\z/.freeze
|
178
187
|
|
179
188
|
FIXED_LENGTH = 426
|
180
189
|
|
@@ -189,14 +198,14 @@ module Metro2
|
|
189
198
|
# Left justified and blank-filled
|
190
199
|
val = val.to_s
|
191
200
|
|
192
|
-
return ' ' * required_length
|
201
|
+
return ' ' * required_length if val.empty?
|
193
202
|
|
194
203
|
unless !!(val =~ permitted_chars)
|
195
|
-
raise ArgumentError
|
204
|
+
raise ArgumentError, "Content (#{val}) contains invalid characters in field '#{name}'"
|
196
205
|
end
|
197
206
|
|
198
207
|
if val.size > required_length
|
199
|
-
val[0..(required_length-1)]
|
208
|
+
val[0..(required_length - 1)]
|
200
209
|
else
|
201
210
|
val + (' ' * (required_length - val.size))
|
202
211
|
end
|
@@ -205,7 +214,7 @@ module Metro2
|
|
205
214
|
def self.numeric_to_metro2(val, required_length,
|
206
215
|
is_monetary: false, name: nil, possible_values: nil)
|
207
216
|
unless possible_values.nil? || possible_values.include?(val)
|
208
|
-
raise ArgumentError
|
217
|
+
raise ArgumentError, "field #{name} has unsupported value: #{val}"
|
209
218
|
end
|
210
219
|
|
211
220
|
# Right justified and zero-filled
|
@@ -213,17 +222,15 @@ module Metro2
|
|
213
222
|
|
214
223
|
return '0' * required_length if val.empty?
|
215
224
|
|
216
|
-
unless !!(val =~ Metro2::NUMERIC)
|
217
|
-
raise ArgumentError.new("field (#{val}) must be numeric")
|
218
|
-
end
|
225
|
+
raise ArgumentError, "field (#{val}) must be numeric" unless !!(val =~ Metro2::NUMERIC)
|
219
226
|
|
220
227
|
decimal_index = val.index('.')
|
221
228
|
val = val[0..(decimal_index - 1)] if decimal_index
|
222
229
|
|
223
230
|
# any value above 1 billion gets set to 999,999,999
|
224
|
-
return '9' * required_length if is_monetary && val.to_f >=
|
231
|
+
return '9' * required_length if is_monetary && val.to_f >= 1_000_000_000
|
225
232
|
if val.size > required_length
|
226
|
-
raise ArgumentError
|
233
|
+
raise ArgumentError, "numeric field (#{val}) is too long (max #{required_length})"
|
227
234
|
end
|
228
235
|
|
229
236
|
('0' * (required_length - val.size)) + val
|
@@ -237,5 +244,5 @@ require 'metro_2/metro2_file'
|
|
237
244
|
require 'metro_2/records/record'
|
238
245
|
|
239
246
|
Dir.new(File.dirname(__FILE__) + '/metro_2/records').each do |file|
|
240
|
-
require('metro_2/records/' + File.basename(file)) if File.extname(file) ==
|
247
|
+
require('metro_2/records/' + File.basename(file)) if File.extname(file) == '.rb'
|
241
248
|
end
|
data/lib/metro_2/version.rb
CHANGED
data/metro_2.gemspec
CHANGED
@@ -1,24 +1,25 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'metro_2/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
+
spec.name = 'metro_2'
|
8
9
|
spec.version = Metro2::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
10
|
+
spec.authors = ['Brian Mascarenhas']
|
11
|
+
spec.email = ['brian@upstart.com']
|
12
|
+
spec.summary = 'Create Metro 2 format files for credit reporting'
|
13
|
+
spec.description = 'Create Metro 2 format files for credit reporting'
|
14
|
+
spec.homepage = ''
|
15
|
+
spec.license = 'MIT'
|
15
16
|
|
16
17
|
spec.files = `git ls-files -z`.split("\x0")
|
17
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
20
|
+
spec.require_paths = ['lib']
|
20
21
|
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
22
|
+
spec.add_development_dependency 'bundler', '~> 2.1'
|
23
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
24
|
+
spec.add_development_dependency 'rspec', '~> 2.13'
|
24
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metro_2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Mascarenhas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '2.1'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1
|
26
|
+
version: '2.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -61,6 +61,7 @@ extra_rdoc_files: []
|
|
61
61
|
files:
|
62
62
|
- ".gitignore"
|
63
63
|
- ".rspec"
|
64
|
+
- ".rubocop.yml"
|
64
65
|
- Gemfile
|
65
66
|
- LICENSE.txt
|
66
67
|
- README.md
|
@@ -99,8 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
100
|
- !ruby/object:Gem::Version
|
100
101
|
version: '0'
|
101
102
|
requirements: []
|
102
|
-
|
103
|
-
rubygems_version: 2.7.6
|
103
|
+
rubygems_version: 3.0.1
|
104
104
|
signing_key:
|
105
105
|
specification_version: 4
|
106
106
|
summary: Create Metro 2 format files for credit reporting
|