ndr_import 4.0.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee9c5c86bbcd00af6877225040d6beb01007575d
4
- data.tar.gz: 7dabb1d68c3467314e90f916f7ccb573be33ea1a
3
+ metadata.gz: 0b9dfb908b8fd54add87023de9f374e6b3a74af9
4
+ data.tar.gz: a0d67ce391abf53242f15e221df6cb297f83cb14
5
5
  SHA512:
6
- metadata.gz: d9a13b367b3b094c041221b989456af8dfa1571395fd0b4ba11e1fcae10d830ea6b50b89a8f59f7bd72bc49209419c3f9bfbbfe86f9c0b47cbdf600b5e754508
7
- data.tar.gz: a8da74311916a789f8203407fc1bfd7db5540940efdf28a1d96b615fa8f52321f7c541596d82a69f8ee704ad50863bf547ec812a86d138d82dfda59d79ba3b9d
6
+ metadata.gz: 46478e258b56cf0cebe45f8255087bbd48371bb0f4e5a1c30ce69e2b40d1500fa24427f8eea949a21a72ab22ef6e5e147283706d99fbe900f490502422b2b5a5
7
+ data.tar.gz: de540d72430687fd0c2731bd810910fc65ba0edf0c05798e6970f437ebbc451b58f9c7a77df35862b830e5b31f973fb3bc264d9646967de42d62a6d6d5db5d41
data/.rubocop.yml CHANGED
@@ -11,6 +11,10 @@ HashSyntax:
11
11
  - ruby19
12
12
  - hash_rockets
13
13
 
14
+ # Override HoundCI's preference for double quotes:
15
+ Style/StringLiterals:
16
+ EnforcedStyle: single_quotes
17
+
14
18
  # Would enforce "-> { }", which we cannot use yet.
15
19
  Lambda:
16
20
  Enabled: false
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: josh.pencheon
14
- safe_revision: 899c079b3a8aaa60cddebc062f072f8d7074cdc8
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: timgentry
162
- safe_revision: cf382902508a21a95b80ac4582fbbd117164e80e
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: 04a29ed03b6772091d7208403f0acc5032117149
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: timgentry
398
- safe_revision: 6bb588c17d33a604c96c648c6eebfe2d063dfbc0
397
+ reviewed_by: joshpencheon
398
+ safe_revision: e70ece909c44b26208eaff3cf27ada7145e03f11
399
399
  test/test_helper.rb:
400
400
  comments:
401
401
  reviewed_by: joshpencheon
@@ -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
- fail 'Header is not valid' if header_lines > 0 && !header_valid?
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
- return unless line.map(&:downcase) == columns
171
- @header_valid = true
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  # This stores the current version of the NdrImport gem
3
3
  module NdrImport
4
- VERSION = '4.0.0'.freeze
4
+ VERSION = '4.0.1'.freeze
5
5
  end
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.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-03-17 00:00:00.000000000 Z
11
+ date: 2016-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport