ndr_import 4.0.0 → 4.0.1
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/.rubocop.yml +4 -0
- data/code_safety.yml +7 -7
- data/lib/ndr_import/table.rb +32 -4
- data/lib/ndr_import/version.rb +1 -1
- data/test/table_test.rb +60 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b9dfb908b8fd54add87023de9f374e6b3a74af9
|
4
|
+
data.tar.gz: a0d67ce391abf53242f15e221df6cb297f83cb14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46478e258b56cf0cebe45f8255087bbd48371bb0f4e5a1c30ce69e2b40d1500fa24427f8eea949a21a72ab22ef6e5e147283706d99fbe900f490502422b2b5a5
|
7
|
+
data.tar.gz: de540d72430687fd0c2731bd810910fc65ba0edf0c05798e6970f437ebbc451b58f9c7a77df35862b830e5b31f973fb3bc264d9646967de42d62a6d6d5db5d41
|
data/.rubocop.yml
CHANGED
data/code_safety.yml
CHANGED
@@ -10,8 +10,8 @@ file safety:
|
|
10
10
|
safe_revision: df3c0be0e655f4fc95c86d4a57bda6eef1fb8955
|
11
11
|
".rubocop.yml":
|
12
12
|
comments:
|
13
|
-
reviewed_by:
|
14
|
-
safe_revision:
|
13
|
+
reviewed_by: joshpencheon
|
14
|
+
safe_revision: ac40ad6e6a9d79d139ba063681f3fe6093c73b14
|
15
15
|
".travis.yml":
|
16
16
|
comments:
|
17
17
|
reviewed_by: josh.pencheon
|
@@ -158,12 +158,12 @@ file safety:
|
|
158
158
|
safe_revision: 3c7f827d17aacbf7b811eea67e27553f3b039070
|
159
159
|
lib/ndr_import/table.rb:
|
160
160
|
comments: uses File.basename
|
161
|
-
reviewed_by:
|
162
|
-
safe_revision:
|
161
|
+
reviewed_by: joshpencheon
|
162
|
+
safe_revision: e70ece909c44b26208eaff3cf27ada7145e03f11
|
163
163
|
lib/ndr_import/version.rb:
|
164
164
|
comments: another check?
|
165
165
|
reviewed_by: joshpencheon
|
166
|
-
safe_revision:
|
166
|
+
safe_revision: 00e02b83f5ae640becdb98d378eddfb67f8ae5c5
|
167
167
|
ndr_import.gemspec:
|
168
168
|
comments:
|
169
169
|
reviewed_by: josh.pencheon
|
@@ -394,8 +394,8 @@ file safety:
|
|
394
394
|
safe_revision: 3c7f827d17aacbf7b811eea67e27553f3b039070
|
395
395
|
test/table_test.rb:
|
396
396
|
comments:
|
397
|
-
reviewed_by:
|
398
|
-
safe_revision:
|
397
|
+
reviewed_by: joshpencheon
|
398
|
+
safe_revision: e70ece909c44b26208eaff3cf27ada7145e03f11
|
399
399
|
test/test_helper.rb:
|
400
400
|
comments:
|
401
401
|
reviewed_by: joshpencheon
|
data/lib/ndr_import/table.rb
CHANGED
@@ -46,6 +46,7 @@ module NdrImport
|
|
46
46
|
|
47
47
|
@row_index = 0
|
48
48
|
@header_valid = false
|
49
|
+
@header_best_guess = nil
|
49
50
|
@notifier.try(:started)
|
50
51
|
|
51
52
|
skip_footer_lines(lines, footer_lines).each do |line|
|
@@ -63,7 +64,7 @@ module NdrImport
|
|
63
64
|
if @row_index < header_lines
|
64
65
|
validate_header(line, @columns)
|
65
66
|
else
|
66
|
-
|
67
|
+
fail_unless_header_complete(@columns)
|
67
68
|
transform_line(line, @row_index, &block)
|
68
69
|
end
|
69
70
|
|
@@ -165,10 +166,37 @@ module NdrImport
|
|
165
166
|
# if there is a header, then check the column headings are as expected in the correct order
|
166
167
|
def validate_header(line, column_mappings)
|
167
168
|
columns = column_names(column_mappings)
|
168
|
-
fail 'Number of columns does not match' if line.length != columns.length
|
169
169
|
|
170
|
-
|
171
|
-
|
170
|
+
unless line.length == columns.length
|
171
|
+
fail "Number of columns does not match; expected #{columns.length}, got #{line.length}!"
|
172
|
+
end
|
173
|
+
|
174
|
+
header_guess = line.map(&:downcase)
|
175
|
+
|
176
|
+
@header_best_guess = header_guess if header_guess.any?(&:present?)
|
177
|
+
@header_valid = true if header_guess == columns
|
178
|
+
end
|
179
|
+
|
180
|
+
def fail_unless_header_complete(column_mappings)
|
181
|
+
return unless header_lines > 0 && !header_valid?
|
182
|
+
|
183
|
+
expected_names = column_names(column_mappings)
|
184
|
+
received_names = @header_best_guess || []
|
185
|
+
|
186
|
+
unexpected = received_names - expected_names
|
187
|
+
missing = expected_names - received_names
|
188
|
+
|
189
|
+
fail header_message_for(missing, unexpected)
|
190
|
+
end
|
191
|
+
|
192
|
+
def header_message_for(missing, unexpected)
|
193
|
+
message = ['Header is not valid!']
|
194
|
+
|
195
|
+
message << "missing: #{missing.inspect}" if missing.any?
|
196
|
+
message << "unexpected: #{unexpected.inspect}" if unexpected.any?
|
197
|
+
message << '(out of order)' if missing.none? && unexpected.none?
|
198
|
+
|
199
|
+
message.join(' ')
|
172
200
|
end
|
173
201
|
|
174
202
|
# returns the column names as we expect to receive them
|
data/lib/ndr_import/version.rb
CHANGED
data/test/table_test.rb
CHANGED
@@ -243,6 +243,66 @@ class TableTest < ActiveSupport::TestCase
|
|
243
243
|
assert_equal expected_output, output
|
244
244
|
end
|
245
245
|
|
246
|
+
def test_invalid_header_length
|
247
|
+
lines = [
|
248
|
+
%w(NOTHEADING1 NOTHEADING2 UHOH3 UHOH4),
|
249
|
+
%w(ONE TWO),
|
250
|
+
%w(DEFINITELYNOTHEADING1 DEFINITELYNOTHEADING2)
|
251
|
+
].each
|
252
|
+
|
253
|
+
table = NdrImport::Table.new(:header_lines => 3, :footer_lines => 0,
|
254
|
+
:klass => 'SomeTestKlass',
|
255
|
+
:columns => [{ 'column' => 'one' }, { 'column' => 'two' }])
|
256
|
+
|
257
|
+
exception = assert_raises(RuntimeError) { table.transform(lines).to_a }
|
258
|
+
assert_match(/expected 2, got 4/, exception.message)
|
259
|
+
end
|
260
|
+
|
261
|
+
def test_jumbled_header
|
262
|
+
lines = [
|
263
|
+
%w(NOTHEADING1 NOTHEADING2 NOTHEADING3),
|
264
|
+
%w(ONE THREE TWO),
|
265
|
+
%w(DATA ROW HERE)
|
266
|
+
].each
|
267
|
+
|
268
|
+
table = NdrImport::Table.new(
|
269
|
+
:header_lines => 2,
|
270
|
+
:footer_lines => 0,
|
271
|
+
:klass => 'SomeTestKlass',
|
272
|
+
:columns => [
|
273
|
+
{ 'column' => 'one' },
|
274
|
+
{ 'column' => 'two' },
|
275
|
+
{ 'column' => 'three' }
|
276
|
+
]
|
277
|
+
)
|
278
|
+
|
279
|
+
exception = assert_raises(RuntimeError) { table.transform(lines).to_a }
|
280
|
+
assert_equal('Header is not valid! (out of order)', exception.message)
|
281
|
+
end
|
282
|
+
|
283
|
+
def test_wrong_header_names
|
284
|
+
lines = [
|
285
|
+
%w(NOTHEADING1 NOTHEADING2 NOTHEADING3),
|
286
|
+
%w(FUN TWO TREE),
|
287
|
+
%w(DATA ROW HERE)
|
288
|
+
].each
|
289
|
+
|
290
|
+
table = NdrImport::Table.new(
|
291
|
+
:header_lines => 2,
|
292
|
+
:footer_lines => 0,
|
293
|
+
:klass => 'SomeTestKlass',
|
294
|
+
:columns => [
|
295
|
+
{ 'column' => 'one' },
|
296
|
+
{ 'column' => 'two' },
|
297
|
+
{ 'column' => 'three' }
|
298
|
+
]
|
299
|
+
)
|
300
|
+
|
301
|
+
exception = assert_raises(RuntimeError) { table.transform(lines).to_a }
|
302
|
+
assert_equal('Header is not valid! missing: ' \
|
303
|
+
'["one", "three"] unexpected: ["fun", "tree"]', exception.message)
|
304
|
+
end
|
305
|
+
|
246
306
|
private
|
247
307
|
|
248
308
|
def simple_deserialized_table
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ndr_import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NCRS Development Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|