ndr_import 5.1.0 → 6.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/code_safety.yml +20 -12
- data/lib/ndr_import/file/delimited.rb +2 -5
- data/lib/ndr_import/table.rb +2 -1
- data/lib/ndr_import/universal_importer_helper.rb +2 -1
- data/lib/ndr_import/version.rb +1 -1
- data/ndr_import.gemspec +1 -1
- data/test/file/delimited_test.rb +20 -3
- data/test/file/registry_test.rb +1 -1
- data/test/non_tabular/table_test.rb +4 -4
- data/test/resources/high_ascii_delimited_example_two.txt +3 -0
- data/test/resources/not_sign_delimited.txt +3 -0
- data/test/universal_importer_helper_test.rb +27 -0
- metadata +14 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7781d10d01e028e81ddb0cccaacd8189a1e4e8dc
|
4
|
+
data.tar.gz: 1a0f2b9288d43be1f3caf0dcc68510b9feb95c22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40f73db1effc623fde1c36b43ab3a016edac4ae308bc36a9aac7b9f4c515e94e8891e99413b758e75c306b30c2f9609e8e41577b491678b89d1b48bb884addf2
|
7
|
+
data.tar.gz: d352544945d48ebee58e62dd0a72ad7ab12101578d4ef6ae740e2f8c15925d023a54f0ef85746e45a47e227d99f3ef14e93d6eebd97632af0eafba5005a5f93a
|
data/code_safety.yml
CHANGED
@@ -75,7 +75,7 @@ file safety:
|
|
75
75
|
lib/ndr_import/file/delimited.rb:
|
76
76
|
comments:
|
77
77
|
reviewed_by: josh.pencheon
|
78
|
-
safe_revision:
|
78
|
+
safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
|
79
79
|
lib/ndr_import/file/excel.rb:
|
80
80
|
comments:
|
81
81
|
reviewed_by: joshpencheon
|
@@ -167,19 +167,19 @@ file safety:
|
|
167
167
|
lib/ndr_import/table.rb:
|
168
168
|
comments: uses File.basename
|
169
169
|
reviewed_by: josh.pencheon
|
170
|
-
safe_revision:
|
170
|
+
safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
|
171
171
|
lib/ndr_import/universal_importer_helper.rb:
|
172
172
|
comments:
|
173
173
|
reviewed_by: josh.pencheon
|
174
|
-
safe_revision:
|
174
|
+
safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
|
175
175
|
lib/ndr_import/version.rb:
|
176
176
|
comments: another check?
|
177
|
-
reviewed_by:
|
178
|
-
safe_revision:
|
177
|
+
reviewed_by: josh.pencheon
|
178
|
+
safe_revision: 5adc16ab99f43a20c1bedcea8724258188ab64bd
|
179
179
|
ndr_import.gemspec:
|
180
180
|
comments:
|
181
|
-
reviewed_by:
|
182
|
-
safe_revision:
|
181
|
+
reviewed_by: josh.pencheon
|
182
|
+
safe_revision: ea0a8c2eca882e5fe43d6dde203490033086a197
|
183
183
|
test/file/base_test.rb:
|
184
184
|
comments:
|
185
185
|
reviewed_by: timgentry
|
@@ -187,7 +187,7 @@ file safety:
|
|
187
187
|
test/file/delimited_test.rb:
|
188
188
|
comments:
|
189
189
|
reviewed_by: josh.pencheon
|
190
|
-
safe_revision:
|
190
|
+
safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
|
191
191
|
test/file/excel_test.rb:
|
192
192
|
comments:
|
193
193
|
reviewed_by: joshpencheon
|
@@ -199,7 +199,7 @@ file safety:
|
|
199
199
|
test/file/registry_test.rb:
|
200
200
|
comments:
|
201
201
|
reviewed_by: josh.pencheon
|
202
|
-
safe_revision:
|
202
|
+
safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
|
203
203
|
test/file/text_test.rb:
|
204
204
|
comments:
|
205
205
|
reviewed_by: timgentry
|
@@ -250,8 +250,8 @@ file safety:
|
|
250
250
|
safe_revision: 63b1e8c275bd63377309d9b124176f39f75576a9
|
251
251
|
test/non_tabular/table_test.rb:
|
252
252
|
comments:
|
253
|
-
reviewed_by:
|
254
|
-
safe_revision:
|
253
|
+
reviewed_by: josh.pencheon
|
254
|
+
safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
|
255
255
|
test/non_tabular_file_helper_test.rb:
|
256
256
|
comments:
|
257
257
|
reviewed_by: timgentry
|
@@ -320,6 +320,10 @@ file safety:
|
|
320
320
|
comments:
|
321
321
|
reviewed_by: timgentry
|
322
322
|
safe_revision: e13005efa08f7168c1c65c60ce97057287ace534
|
323
|
+
test/resources/high_ascii_delimited_example_two.txt:
|
324
|
+
comments:
|
325
|
+
reviewed_by: josh.pencheon
|
326
|
+
safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
|
323
327
|
test/resources/malformed.xml:
|
324
328
|
comments:
|
325
329
|
reviewed_by: timgentry
|
@@ -348,6 +352,10 @@ file safety:
|
|
348
352
|
comments:
|
349
353
|
reviewed_by: timgentry
|
350
354
|
safe_revision: 45da71ebd3acbc0fe53755bcd75483ba17cb6924
|
355
|
+
test/resources/not_sign_delimited.txt:
|
356
|
+
comments:
|
357
|
+
reviewed_by: josh.pencheon
|
358
|
+
safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
|
351
359
|
test/resources/sample_xls.xls:
|
352
360
|
comments:
|
353
361
|
reviewed_by: timgentry
|
@@ -419,4 +427,4 @@ file safety:
|
|
419
427
|
test/universal_importer_helper_test.rb:
|
420
428
|
comments:
|
421
429
|
reviewed_by: josh.pencheon
|
422
|
-
safe_revision:
|
430
|
+
safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
|
@@ -9,11 +9,8 @@ module NdrImport
|
|
9
9
|
# This class is a delimited file handler that returns a single table.
|
10
10
|
class Delimited < Base
|
11
11
|
DELIMITED_COL_SEP = {
|
12
|
-
'csv' => nil
|
13
|
-
'pipe' => '|',
|
14
|
-
'thorn' => "\xfe" # high-ascii (lower case thorn) delimited files
|
12
|
+
'csv' => nil
|
15
13
|
}
|
16
|
-
|
17
14
|
def initialize(filename, format, options = {})
|
18
15
|
super
|
19
16
|
|
@@ -86,6 +83,6 @@ module NdrImport
|
|
86
83
|
end
|
87
84
|
end
|
88
85
|
|
89
|
-
Registry.register(Delimited, 'csv', '
|
86
|
+
Registry.register(Delimited, 'csv', 'delimited')
|
90
87
|
end
|
91
88
|
end
|
data/lib/ndr_import/table.rb
CHANGED
@@ -10,7 +10,8 @@ module NdrImport
|
|
10
10
|
include NdrImport::Mapper
|
11
11
|
|
12
12
|
def self.all_valid_options
|
13
|
-
%w
|
13
|
+
%w[canonical_name delimiter filename_pattern tablename_pattern header_lines footer_lines
|
14
|
+
format klass columns]
|
14
15
|
end
|
15
16
|
|
16
17
|
def all_valid_options
|
@@ -34,7 +34,8 @@ module NdrImport
|
|
34
34
|
|
35
35
|
tables = NdrImport::File::Registry.tables(filename,
|
36
36
|
table_mapping.try(:format),
|
37
|
-
'unzip_path' => unzip_path
|
37
|
+
'unzip_path' => unzip_path,
|
38
|
+
'col_sep' => table_mapping.try(:delimiter))
|
38
39
|
yield_tables_and_their_content(filename, tables, &block)
|
39
40
|
end
|
40
41
|
end
|
data/lib/ndr_import/version.rb
CHANGED
data/ndr_import.gemspec
CHANGED
@@ -39,7 +39,7 @@ Gem::Specification.new do |spec|
|
|
39
39
|
spec.add_development_dependency 'rake', '~> 10.0'
|
40
40
|
spec.add_development_dependency 'minitest'
|
41
41
|
spec.add_development_dependency 'mocha'
|
42
|
-
spec.add_development_dependency 'ndr_dev_support', '~> 3.
|
42
|
+
spec.add_development_dependency 'ndr_dev_support', '~> 3.1', '>= 3.1.3'
|
43
43
|
spec.add_development_dependency 'guard'
|
44
44
|
spec.add_development_dependency 'guard-rubocop'
|
45
45
|
spec.add_development_dependency 'guard-test'
|
data/test/file/delimited_test.rb
CHANGED
@@ -23,7 +23,7 @@ module NdrImport
|
|
23
23
|
|
24
24
|
test 'should read pipe correctly' do
|
25
25
|
file_path = @permanent_test_files.join('normal_pipe.csv')
|
26
|
-
handler = NdrImport::File::Delimited.new(file_path, '
|
26
|
+
handler = NdrImport::File::Delimited.new(file_path, 'delimited', 'col_sep' => '|')
|
27
27
|
handler.tables.each do |tablename, sheet|
|
28
28
|
assert_nil tablename
|
29
29
|
sheet = sheet.to_a
|
@@ -35,7 +35,7 @@ module NdrImport
|
|
35
35
|
|
36
36
|
test 'should read thorn correctly' do
|
37
37
|
file_path = @permanent_test_files.join('normal_thorn.csv')
|
38
|
-
handler = NdrImport::File::Delimited.new(file_path, '
|
38
|
+
handler = NdrImport::File::Delimited.new(file_path, 'delimited', 'col_sep' => "\xfe")
|
39
39
|
handler.tables.each do |tablename, sheet|
|
40
40
|
assert_nil tablename
|
41
41
|
sheet = sheet.to_a
|
@@ -71,7 +71,7 @@ module NdrImport
|
|
71
71
|
|
72
72
|
test 'should read acsii-delimited csv' do
|
73
73
|
file_path = @permanent_test_files.join('high_ascii_delimited.txt')
|
74
|
-
handler = NdrImport::File::Delimited.new(file_path, '
|
74
|
+
handler = NdrImport::File::Delimited.new(file_path, 'delimited', 'col_sep' => "\xfe")
|
75
75
|
handler.tables.each do |tablename, sheet|
|
76
76
|
assert_nil tablename
|
77
77
|
assert_instance_of Enumerator, sheet
|
@@ -82,6 +82,23 @@ module NdrImport
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
+
test 'should read acsii-delimited txt' do
|
86
|
+
rows = []
|
87
|
+
file_path = @permanent_test_files.join('high_ascii_delimited_example_two.txt')
|
88
|
+
handler = NdrImport::File::Delimited.new(file_path, 'delimited', 'col_sep' => "\xfd")
|
89
|
+
handler.tables.each do |tablename, sheet|
|
90
|
+
assert_nil tablename
|
91
|
+
assert_instance_of Enumerator, sheet
|
92
|
+
sheet.each do |row|
|
93
|
+
rows << row
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
assert_equal(('A'..'Z').to_a, rows[0])
|
98
|
+
assert_equal ['1'] * 26, rows[1]
|
99
|
+
assert_equal ['2'] * 26, rows[2]
|
100
|
+
end
|
101
|
+
|
85
102
|
test 'should read line-by-line' do
|
86
103
|
rows = []
|
87
104
|
file_path = @permanent_test_files.join('normal.csv')
|
data/test/file/registry_test.rb
CHANGED
@@ -12,7 +12,7 @@ module NdrImport
|
|
12
12
|
|
13
13
|
test 'Registry.handlers' do
|
14
14
|
assert_instance_of Hash, NdrImport::File::Registry.handlers
|
15
|
-
assert_equal %w
|
15
|
+
assert_equal %w[csv delimited doc pdf txt xls xlsx zip],
|
16
16
|
NdrImport::File::Registry.handlers.keys.sort
|
17
17
|
end
|
18
18
|
|
@@ -47,10 +47,10 @@ STR
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_all_valid_options
|
50
|
-
valid_options = %w
|
51
|
-
canonical_name capture_start_line columns end_in_a_record end_line_pattern
|
52
|
-
format klass remove_lines start_in_a_record start_line_pattern
|
53
|
-
|
50
|
+
valid_options = %w[
|
51
|
+
canonical_name capture_start_line columns delimiter end_in_a_record end_line_pattern
|
52
|
+
filename_pattern format klass remove_lines start_in_a_record start_line_pattern
|
53
|
+
]
|
54
54
|
assert_equal valid_options.sort,
|
55
55
|
NdrImport::NonTabular::Table.all_valid_options.sort
|
56
56
|
end
|
@@ -46,6 +46,33 @@ class UniversalImporterHelperTest < ActiveSupport::TestCase
|
|
46
46
|
refute enumerator_ran
|
47
47
|
end
|
48
48
|
|
49
|
+
test 'extract and transform with bespoke delimiter' do
|
50
|
+
table_mappings = [
|
51
|
+
NdrImport::Table.new(filename_pattern: /\.txt\z/i,
|
52
|
+
format: 'delimited',
|
53
|
+
delimiter: '¬',
|
54
|
+
header_lines: 1,
|
55
|
+
footer_lines: 0,
|
56
|
+
klass: 'SomeTestClass',
|
57
|
+
columns: [{ 'column' => 'one' },
|
58
|
+
{ 'column' => 'two' },
|
59
|
+
{ 'column' => 'three' }])
|
60
|
+
]
|
61
|
+
source_file = @permanent_test_files.join('not_sign_delimited.txt')
|
62
|
+
unzip_path = SafePath.new('test_space_rw').to_s
|
63
|
+
@test_importer.stubs(:get_table_mapping).returns(table_mappings.first)
|
64
|
+
@test_importer.extract(source_file, unzip_path) do |table, rows|
|
65
|
+
mapped_rows = table.transform(rows)
|
66
|
+
|
67
|
+
assert_instance_of NdrImport::Table, table
|
68
|
+
assert_instance_of Enumerator, rows
|
69
|
+
expected_mapped_data = [{ rawtext: { 'one' => 'some', 'two' => 'data', 'three' => 'here' } },
|
70
|
+
{ rawtext: { 'one' => 'more', 'two' => 'data', 'three' => 'here' } }]
|
71
|
+
|
72
|
+
assert_equal expected_mapped_data, (mapped_rows.to_a.map { |_klass, fields| fields })
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
49
76
|
test 'get_notifier' do
|
50
77
|
class TestImporterWithoutNotifier
|
51
78
|
include NdrImport::UniversalImporterHelper
|
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
|
+
version: 6.0.0
|
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: 2018-
|
11
|
+
date: 2018-09-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -222,14 +222,20 @@ dependencies:
|
|
222
222
|
requirements:
|
223
223
|
- - "~>"
|
224
224
|
- !ruby/object:Gem::Version
|
225
|
-
version: '3.
|
225
|
+
version: '3.1'
|
226
|
+
- - ">="
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: 3.1.3
|
226
229
|
type: :development
|
227
230
|
prerelease: false
|
228
231
|
version_requirements: !ruby/object:Gem::Requirement
|
229
232
|
requirements:
|
230
233
|
- - "~>"
|
231
234
|
- !ruby/object:Gem::Version
|
232
|
-
version: '3.
|
235
|
+
version: '3.1'
|
236
|
+
- - ">="
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: 3.1.3
|
233
239
|
- !ruby/object:Gem::Dependency
|
234
240
|
name: guard
|
235
241
|
requirement: !ruby/object:Gem::Requirement
|
@@ -386,6 +392,7 @@ files:
|
|
386
392
|
- test/resources/hello_world.pdf
|
387
393
|
- test/resources/hello_world.txt
|
388
394
|
- test/resources/high_ascii_delimited.txt
|
395
|
+
- test/resources/high_ascii_delimited_example_two.txt
|
389
396
|
- test/resources/malformed.xml
|
390
397
|
- test/resources/normal.csv
|
391
398
|
- test/resources/normal.csv.zip
|
@@ -393,6 +400,7 @@ files:
|
|
393
400
|
- test/resources/normal_thorn.csv
|
394
401
|
- test/resources/not_a_pdf.pdf
|
395
402
|
- test/resources/not_a_word_file.doc
|
403
|
+
- test/resources/not_sign_delimited.txt
|
396
404
|
- test/resources/sample_xls.xls
|
397
405
|
- test/resources/sample_xlsx.xlsx
|
398
406
|
- test/resources/sheet_streaming.xls
|
@@ -471,6 +479,7 @@ test_files:
|
|
471
479
|
- test/resources/hello_world.pdf
|
472
480
|
- test/resources/hello_world.txt
|
473
481
|
- test/resources/high_ascii_delimited.txt
|
482
|
+
- test/resources/high_ascii_delimited_example_two.txt
|
474
483
|
- test/resources/malformed.xml
|
475
484
|
- test/resources/normal.csv
|
476
485
|
- test/resources/normal.csv.zip
|
@@ -478,6 +487,7 @@ test_files:
|
|
478
487
|
- test/resources/normal_thorn.csv
|
479
488
|
- test/resources/not_a_pdf.pdf
|
480
489
|
- test/resources/not_a_word_file.doc
|
490
|
+
- test/resources/not_sign_delimited.txt
|
481
491
|
- test/resources/sample_xls.xls
|
482
492
|
- test/resources/sample_xlsx.xlsx
|
483
493
|
- test/resources/sheet_streaming.xls
|