metro2_format 1.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 +7 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +49 -0
- data/Rakefile +17 -0
- data/lib/metro_2.rb +241 -0
- data/lib/metro_2/fields.rb +123 -0
- data/lib/metro_2/metro2_file.rb +112 -0
- data/lib/metro_2/records/base_segment.rb +97 -0
- data/lib/metro_2/records/header_segment.rb +23 -0
- data/lib/metro_2/records/j1_segment.rb +19 -0
- data/lib/metro_2/records/j2_segment.rb +27 -0
- data/lib/metro_2/records/k2_segment.rb +21 -0
- data/lib/metro_2/records/record.rb +24 -0
- data/lib/metro_2/records/trailer_segment.rb +53 -0
- data/lib/metro_2/version.rb +8 -0
- data/metro_2.gemspec +24 -0
- data/spec/records/base_segment_spec.rb +262 -0
- data/spec/records/header_segment_spec.rb +43 -0
- data/spec/records/j1_segment_spec.rb +36 -0
- data/spec/records/j2_segment_spec.rb +51 -0
- data/spec/records/k2_segment_spec.rb +57 -0
- data/spec/records/trailer_segment_spec.rb +72 -0
- data/spec/spec_helper.rb +8 -0
- metadata +117 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Metro2::Records::HeaderSegment do
|
4
|
+
before(:each) do
|
5
|
+
@header = Metro2::Records::HeaderSegment.new
|
6
|
+
@header.cycle_number = 15
|
7
|
+
@header.equifax_program_identifier = 'EFAXID'
|
8
|
+
@header.transunion_program_identifier = 'TRANSUNION'
|
9
|
+
@header.activity_date = Date.new(2014,9,14)
|
10
|
+
@header.created_date = Date.new(2014,9,15)
|
11
|
+
@header.program_date = Date.new(2014,9,1)
|
12
|
+
@header.reporter_name = 'Credit Reporter'
|
13
|
+
@header.reporter_address = '123 Report Dr Address CA 91111'
|
14
|
+
@header.reporter_telephone_number = '5555555555'
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#to_metro2' do
|
18
|
+
it 'should generate header segment string' do
|
19
|
+
exp = [
|
20
|
+
'0426',
|
21
|
+
'HEADER',
|
22
|
+
'15',
|
23
|
+
' ',
|
24
|
+
'EFAXID ',
|
25
|
+
' ',
|
26
|
+
'TRANSUNION',
|
27
|
+
'09142014',
|
28
|
+
'09152014',
|
29
|
+
'09012014',
|
30
|
+
'00000000',
|
31
|
+
'Credit Reporter'.ljust(40, ' '),
|
32
|
+
'123 Report Dr Address CA 91111'.ljust(96, ' '),
|
33
|
+
'5555555555',
|
34
|
+
'Upstart Engineer metro 2 gem'.ljust(40, ' '),
|
35
|
+
'01203',
|
36
|
+
' ' * 156
|
37
|
+
]
|
38
|
+
header_str = @header.to_metro2
|
39
|
+
expect(header_str).to eql(exp.join(''))
|
40
|
+
expect(header_str.size).to eql(Metro2::FIXED_LENGTH)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Metro2::Records::J1Segment do
|
4
|
+
before do
|
5
|
+
@j1 = described_class.new
|
6
|
+
@j1.surname = 'Simpson'
|
7
|
+
@j1.first_name = 'Homer'
|
8
|
+
@j1.middle_name = 'Jay'
|
9
|
+
@j1.social_security_number = '333224444'
|
10
|
+
@j1.date_of_birth = Date.new(1987, 4, 19)
|
11
|
+
@j1.telephone_number = '5555555555'
|
12
|
+
@j1.ecoa_code = 1
|
13
|
+
end
|
14
|
+
|
15
|
+
context '#to_metro2' do
|
16
|
+
it 'should generate j1 segment string' do
|
17
|
+
exp = [
|
18
|
+
'J1',
|
19
|
+
' ',
|
20
|
+
'Simpson'.ljust(25, ' '),
|
21
|
+
'Homer'.ljust(20, ' '),
|
22
|
+
'Jay'.ljust(20, ' '),
|
23
|
+
' ',
|
24
|
+
'333224444',
|
25
|
+
'04191987',
|
26
|
+
'5555555555',
|
27
|
+
'1',
|
28
|
+
' ',
|
29
|
+
' '
|
30
|
+
]
|
31
|
+
|
32
|
+
j1_str = @j1.to_metro2
|
33
|
+
expect(j1_str).to eq(exp.join(''))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Metro2::Records::J2Segment do
|
4
|
+
before do
|
5
|
+
@j2 = described_class.new
|
6
|
+
@j2.surname = 'Simpson'
|
7
|
+
@j2.first_name = 'Homer'
|
8
|
+
@j2.middle_name = 'Jay'
|
9
|
+
@j2.social_security_number = '333224444'
|
10
|
+
@j2.date_of_birth = Date.new(1987, 4, 19)
|
11
|
+
@j2.telephone_number = '5555555555'
|
12
|
+
@j2.ecoa_code = 1
|
13
|
+
@j2.country_code = 'US'
|
14
|
+
@j2.address_1 = '742 Evergreen Terrace'
|
15
|
+
@j2.city = 'Springfield'
|
16
|
+
@j2.state = 'IL'
|
17
|
+
@j2.postal_code = '54321'
|
18
|
+
@j2.address_indicator = 'N'
|
19
|
+
@j2.residence_code = 'O'
|
20
|
+
end
|
21
|
+
|
22
|
+
context '#to_metro2' do
|
23
|
+
it 'should generate j1 segment string' do
|
24
|
+
exp = [
|
25
|
+
'J2',
|
26
|
+
' ',
|
27
|
+
'Simpson'.ljust(25, ' '),
|
28
|
+
'Homer'.ljust(20, ' '),
|
29
|
+
'Jay'.ljust(20, ' '),
|
30
|
+
' ',
|
31
|
+
'333224444',
|
32
|
+
'04191987',
|
33
|
+
'5555555555',
|
34
|
+
'1',
|
35
|
+
' ',
|
36
|
+
'US',
|
37
|
+
'742 Evergreen Terrace'.ljust(32, ' '),
|
38
|
+
' ' * 32,
|
39
|
+
'Springfield'.ljust(20, ' '),
|
40
|
+
'IL',
|
41
|
+
'54321 ',
|
42
|
+
'N',
|
43
|
+
'O',
|
44
|
+
' '
|
45
|
+
]
|
46
|
+
|
47
|
+
j2_str = @j2.to_metro2
|
48
|
+
expect(j2_str).to eq(exp.join(''))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Metro2::Records::BaseSegment do
|
4
|
+
before do
|
5
|
+
@k2_segment = Metro2::Records::K2Segment.new
|
6
|
+
@k2_segment.purchased_from_sold_to_indicator = indicator
|
7
|
+
@k2_segment.purchased_from_sold_to_name = company_name
|
8
|
+
end
|
9
|
+
|
10
|
+
context "#to_metro2" do
|
11
|
+
let(:expected) { ["K2", indicator.to_s, company_name.to_s.ljust(30, " "), " "] }
|
12
|
+
|
13
|
+
context "with valid attributes set" do
|
14
|
+
let(:indicator) { 1 }
|
15
|
+
let(:company_name) { "Loan Buying Company" }
|
16
|
+
|
17
|
+
it "should create output string that matches expected" do
|
18
|
+
k2_segment_str = @k2_segment.to_metro2
|
19
|
+
expect(k2_segment_str).to eql(expected.join)
|
20
|
+
expect(k2_segment_str.size).to eql(Metro2::Records::K2Segment::LENGTH)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "with a 9 indicator" do
|
25
|
+
let(:indicator) { 9 }
|
26
|
+
|
27
|
+
context "with a blank purchased_from_sold_to_name" do
|
28
|
+
let(:company_name) { nil }
|
29
|
+
|
30
|
+
it "should create output string that matches expected" do
|
31
|
+
k2_segment_str = @k2_segment.to_metro2
|
32
|
+
expect(k2_segment_str).to eql(expected.join)
|
33
|
+
expect(k2_segment_str.size).to eql(Metro2::Records::K2Segment::LENGTH)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "with purchased_from_sold_to_name that is not blank" do
|
38
|
+
let(:company_name) { "Loan Buying Company" }
|
39
|
+
|
40
|
+
it "should raise an error that the field should be blank" do
|
41
|
+
expect { @k2_segment.to_metro2 }.
|
42
|
+
to raise_error(/purchased_from_sold_to_name must be blank/)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "with a non-supported indicator" do
|
48
|
+
let(:indicator) { 7 }
|
49
|
+
let(:company_name) { "Loan Buying Company" }
|
50
|
+
|
51
|
+
it "should raise an error that the value is unsupported" do
|
52
|
+
expect { @k2_segment.to_metro2 }.
|
53
|
+
to raise_error(/field purchased_from_sold_to_indicator has unsupported value/)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Metro2::Records::TrailerSegment do
|
4
|
+
before(:each) do
|
5
|
+
@trailer = Metro2::Records::TrailerSegment.new
|
6
|
+
@trailer.total_base_records = 1
|
7
|
+
@trailer.total_status_code_11 = 1
|
8
|
+
@trailer.total_social_security_numbers = 1
|
9
|
+
@trailer.total_social_security_numbers_in_base = 1
|
10
|
+
@trailer.total_date_of_births = 1
|
11
|
+
@trailer.total_date_of_births_in_base = 1
|
12
|
+
@trailer.total_telephome_numbers = 1
|
13
|
+
@trailer.total_k2_segments = 1
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#to_metro2' do
|
17
|
+
it 'should generate trailer segment string' do
|
18
|
+
exp = [
|
19
|
+
'0426',
|
20
|
+
'TRAILER',
|
21
|
+
'000000001',
|
22
|
+
' ' * 9,
|
23
|
+
'0' * 9,
|
24
|
+
'0' * 9,
|
25
|
+
'0' * 9,
|
26
|
+
'0' * 9,
|
27
|
+
'0' * 9,
|
28
|
+
'0' * 9,
|
29
|
+
'000000001',
|
30
|
+
'0' * 9,
|
31
|
+
'0' * 9,
|
32
|
+
'0' * 9,
|
33
|
+
'0' * 9,
|
34
|
+
'0' * 9,
|
35
|
+
'0' * 9,
|
36
|
+
'0' * 9,
|
37
|
+
'0' * 9,
|
38
|
+
'0' * 9,
|
39
|
+
'0' * 9,
|
40
|
+
'0' * 9,
|
41
|
+
'0' * 9,
|
42
|
+
'0' * 9,
|
43
|
+
'0' * 9,
|
44
|
+
'0' * 9,
|
45
|
+
'0' * 9,
|
46
|
+
'0' * 9,
|
47
|
+
'0' * 9,
|
48
|
+
'0' * 9,
|
49
|
+
'0' * 9,
|
50
|
+
'0' * 9,
|
51
|
+
'0' * 9,
|
52
|
+
'000000001',
|
53
|
+
'0' * 9,
|
54
|
+
'0' * 9,
|
55
|
+
'0' * 9,
|
56
|
+
'000000001',
|
57
|
+
'000000001',
|
58
|
+
'0' * 9,
|
59
|
+
'0' * 9,
|
60
|
+
'000000001',
|
61
|
+
'000000001',
|
62
|
+
'0' * 9,
|
63
|
+
'0' * 9,
|
64
|
+
'000000001',
|
65
|
+
' ' * 19
|
66
|
+
]
|
67
|
+
trailer_str = @trailer.to_metro2
|
68
|
+
expect(trailer_str).to eql(exp.join(''))
|
69
|
+
expect(trailer_str.size).to eql(Metro2::FIXED_LENGTH)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: metro2_format
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ranu Lathi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-11-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.13'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.13'
|
55
|
+
description: Create Metro 2 format files for credit reporting to credit agencies
|
56
|
+
email:
|
57
|
+
- ranu@peachstreet.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- ".rspec"
|
64
|
+
- Gemfile
|
65
|
+
- LICENSE.txt
|
66
|
+
- README.md
|
67
|
+
- Rakefile
|
68
|
+
- lib/metro_2.rb
|
69
|
+
- lib/metro_2/fields.rb
|
70
|
+
- lib/metro_2/metro2_file.rb
|
71
|
+
- lib/metro_2/records/base_segment.rb
|
72
|
+
- lib/metro_2/records/header_segment.rb
|
73
|
+
- lib/metro_2/records/j1_segment.rb
|
74
|
+
- lib/metro_2/records/j2_segment.rb
|
75
|
+
- lib/metro_2/records/k2_segment.rb
|
76
|
+
- lib/metro_2/records/record.rb
|
77
|
+
- lib/metro_2/records/trailer_segment.rb
|
78
|
+
- lib/metro_2/version.rb
|
79
|
+
- metro_2.gemspec
|
80
|
+
- spec/records/base_segment_spec.rb
|
81
|
+
- spec/records/header_segment_spec.rb
|
82
|
+
- spec/records/j1_segment_spec.rb
|
83
|
+
- spec/records/j2_segment_spec.rb
|
84
|
+
- spec/records/k2_segment_spec.rb
|
85
|
+
- spec/records/trailer_segment_spec.rb
|
86
|
+
- spec/spec_helper.rb
|
87
|
+
homepage: ''
|
88
|
+
licenses:
|
89
|
+
- MIT
|
90
|
+
metadata: {}
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubygems_version: 3.0.6
|
107
|
+
signing_key:
|
108
|
+
specification_version: 4
|
109
|
+
summary: Create Metro 2 format files for credit reporting to credit agencies
|
110
|
+
test_files:
|
111
|
+
- spec/records/base_segment_spec.rb
|
112
|
+
- spec/records/header_segment_spec.rb
|
113
|
+
- spec/records/j1_segment_spec.rb
|
114
|
+
- spec/records/j2_segment_spec.rb
|
115
|
+
- spec/records/k2_segment_spec.rb
|
116
|
+
- spec/records/trailer_segment_spec.rb
|
117
|
+
- spec/spec_helper.rb
|