ndr_import 4.0.1 → 4.1.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/.travis.yml +3 -3
- data/Rakefile +2 -1
- data/code_safety.yml +18 -6
- data/gemfiles/Gemfile.rails50 +5 -0
- data/lib/ndr_import/universal_importer_helper.rb +61 -0
- data/lib/ndr_import/version.rb +1 -1
- data/ndr_import.gemspec +3 -3
- data/test/mapper_test.rb +2 -2
- data/test/universal_importer_helper_test.rb +58 -0
- metadata +14 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b7020625dad38c6d789cf4b081fa3b770252bad
|
4
|
+
data.tar.gz: 145338f57d67c6cf72a12077e8a38918390aac51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b6050f2f7c69de8322113eaf21f96c0fbd97524ac7e0afebd2f9d576f945794add6323d14b53be9fe5cd01317e222305e7a1c9017e715ca8c6d6ce210efa1b4
|
7
|
+
data.tar.gz: 9351ef5aedeb46798f73b12b84531c617430b4f9726370a2cfceed5800fca63fb37149043f3ee1b818050160d51acf2f72d6bc70b773dcf6140463ad5167fe82
|
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
data/code_safety.yml
CHANGED
@@ -15,7 +15,7 @@ file safety:
|
|
15
15
|
".travis.yml":
|
16
16
|
comments:
|
17
17
|
reviewed_by: josh.pencheon
|
18
|
-
safe_revision:
|
18
|
+
safe_revision: f9de73c5988557e29ea73c279f2fdae19ffa8bb4
|
19
19
|
CODE_OF_CONDUCT.md:
|
20
20
|
comments:
|
21
21
|
reviewed_by: timgentry
|
@@ -39,7 +39,7 @@ file safety:
|
|
39
39
|
Rakefile:
|
40
40
|
comments:
|
41
41
|
reviewed_by: josh.pencheon
|
42
|
-
safe_revision:
|
42
|
+
safe_revision: 5a7f26cecaabab20f4e666776f9166dcc3fa6bfe
|
43
43
|
gemfiles/Gemfile.rails32:
|
44
44
|
comments:
|
45
45
|
reviewed_by: timgentry
|
@@ -52,6 +52,10 @@ file safety:
|
|
52
52
|
comments:
|
53
53
|
reviewed_by: timgentry
|
54
54
|
safe_revision: 0c5967732100f43e7b60a97a7f0aae60d3641791
|
55
|
+
gemfiles/Gemfile.rails50:
|
56
|
+
comments:
|
57
|
+
reviewed_by: josh.pencheon
|
58
|
+
safe_revision: 738577adf8eeacc7a000d08289bd7ae7bf3b5849
|
55
59
|
lib/ndr_import.rb:
|
56
60
|
comments:
|
57
61
|
reviewed_by: timgentry
|
@@ -160,14 +164,18 @@ file safety:
|
|
160
164
|
comments: uses File.basename
|
161
165
|
reviewed_by: joshpencheon
|
162
166
|
safe_revision: e70ece909c44b26208eaff3cf27ada7145e03f11
|
167
|
+
lib/ndr_import/universal_importer_helper.rb:
|
168
|
+
comments:
|
169
|
+
reviewed_by: josh.pencheon
|
170
|
+
safe_revision: 36143ff4f48e0433a7b04b63143ef6d6d2481fec
|
163
171
|
lib/ndr_import/version.rb:
|
164
172
|
comments: another check?
|
165
|
-
reviewed_by:
|
166
|
-
safe_revision:
|
173
|
+
reviewed_by: josh.pencheon
|
174
|
+
safe_revision: 42f08fa7fdb0ff325b0f830af66d1829efa9b273
|
167
175
|
ndr_import.gemspec:
|
168
176
|
comments:
|
169
177
|
reviewed_by: josh.pencheon
|
170
|
-
safe_revision:
|
178
|
+
safe_revision: 0a8fccbac2a264adcdae7e46df54da25dc9cfdcd
|
171
179
|
test/file/base_test.rb:
|
172
180
|
comments:
|
173
181
|
reviewed_by: timgentry
|
@@ -227,7 +235,7 @@ file safety:
|
|
227
235
|
test/mapper_test.rb:
|
228
236
|
comments: exposes Mapper internals to test them
|
229
237
|
reviewed_by: josh.pencheon
|
230
|
-
safe_revision:
|
238
|
+
safe_revision: f707f42686cabe21d80e2547e9a24fe094b6c7d1
|
231
239
|
test/non_tabular/mapping_test.rb:
|
232
240
|
comments:
|
233
241
|
reviewed_by: timgentry
|
@@ -400,3 +408,7 @@ file safety:
|
|
400
408
|
comments:
|
401
409
|
reviewed_by: joshpencheon
|
402
410
|
safe_revision: 646c08329cba0ba8ea2c37226cf26434da29c747
|
411
|
+
test/universal_importer_helper_test.rb:
|
412
|
+
comments:
|
413
|
+
reviewed_by: josh.pencheon
|
414
|
+
safe_revision: 36143ff4f48e0433a7b04b63143ef6d6d2481fec
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'ndr_import/file/registry'
|
2
|
+
|
3
|
+
module NdrImport
|
4
|
+
# This mixin provides file importer helper methods that abstract away some of the
|
5
|
+
# complexity of enumerating over files and tables (which should be universally useful).
|
6
|
+
module UniversalImporterHelper
|
7
|
+
def table_enumerators(filename)
|
8
|
+
table_enumerators = {}
|
9
|
+
|
10
|
+
extract(filename).each do |table, rows|
|
11
|
+
table_enumerators[table.canonical_name] = table.transform(rows)
|
12
|
+
end
|
13
|
+
|
14
|
+
table_enumerators
|
15
|
+
end
|
16
|
+
|
17
|
+
# This method returns the correct NdrImport::{,NonTabular::}Table for the given
|
18
|
+
# filename/tablename. It requires all the mappings to be stored in the table_mappings
|
19
|
+
# instance variable.
|
20
|
+
def get_table_mapping(filename, tablename)
|
21
|
+
@table_mappings.find { |mapping| mapping.match(filename, tablename) }
|
22
|
+
end
|
23
|
+
|
24
|
+
# Iterate through the file(s) line by line, yielding each one in turn, using
|
25
|
+
# get_table_mapping to select the mapping relevant to this file.
|
26
|
+
def extract(source_file, unzip_path, &block)
|
27
|
+
return enum_for(:extract, source_file, unzip_path) unless block
|
28
|
+
|
29
|
+
files = NdrImport::File::Registry.files(source_file,
|
30
|
+
'unzip_path' => unzip_path)
|
31
|
+
files.each do |filename|
|
32
|
+
# now at the individual file level, can we find the table mapping?
|
33
|
+
table_mapping = get_table_mapping(filename, nil)
|
34
|
+
|
35
|
+
tables = NdrImport::File::Registry.tables(filename,
|
36
|
+
table_mapping.try(:format),
|
37
|
+
'unzip_path' => unzip_path)
|
38
|
+
yield_tables_and_their_content(filename, tables, &block)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# This method does the table row yielding for the extract method, setting the notifier
|
43
|
+
# so that we can monitor progress
|
44
|
+
def yield_tables_and_their_content(filename, tables, &block)
|
45
|
+
tables.each do |tablename, table_content|
|
46
|
+
mapping = get_table_mapping(filename, tablename)
|
47
|
+
next if mapping.nil?
|
48
|
+
|
49
|
+
total_records = table_content.count unless table_content.is_a?(Enumerator)
|
50
|
+
mapping.notifier = get_notifier(total_records)
|
51
|
+
|
52
|
+
yield(mapping, table_content)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# This method needs to be implemented where this mixin is used.
|
57
|
+
def get_notifier(_total_records)
|
58
|
+
fail 'Implement get_notifier'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/ndr_import/version.rb
CHANGED
data/ndr_import.gemspec
CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_dependency 'activesupport', '>= 3.2.18', '< 5.
|
23
|
-
spec.add_dependency 'ndr_support', '>=
|
22
|
+
spec.add_dependency 'activesupport', '>= 3.2.18', '< 5.1'
|
23
|
+
spec.add_dependency 'ndr_support', '>= 4.1.2', '< 6'
|
24
24
|
|
25
25
|
spec.add_dependency 'rubyzip', '~> 1.1'
|
26
26
|
spec.add_dependency 'roo', '~> 2.0'
|
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_dependency 'pdf-reader', '1.2.0'
|
32
32
|
spec.add_dependency 'msworddoc-extractor', '0.2.0'
|
33
33
|
|
34
|
-
spec.required_ruby_version = '>= 2.
|
34
|
+
spec.required_ruby_version = '>= 2.2'
|
35
35
|
|
36
36
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
37
37
|
spec.add_development_dependency 'rake', '~> 10.0'
|
data/test/mapper_test.rb
CHANGED
@@ -19,7 +19,7 @@ class MapperTest < ActiveSupport::TestCase
|
|
19
19
|
format_mapping_yyyymmdd = { 'format' => 'yyyymmdd' }
|
20
20
|
clean_name_mapping = { 'clean' => :name }
|
21
21
|
clean_ethniccategory_mapping = { 'clean' => :ethniccategory }
|
22
|
-
clean_icd_mapping = { 'clean' => :
|
22
|
+
clean_icd_mapping = { 'clean' => :icd }
|
23
23
|
clean_opcs_mapping = { 'clean' => :code_opcs }
|
24
24
|
map_mapping = { 'map' => { 'A' => '1' } }
|
25
25
|
replace_mapping = { 'replace' => { '.0' => '' } }
|
@@ -325,7 +325,7 @@ class MapperTest < ActiveSupport::TestCase
|
|
325
325
|
end
|
326
326
|
|
327
327
|
test 'map should clean icd code' do
|
328
|
-
assert_equal '
|
328
|
+
assert_equal 'C343 R932 Z515',
|
329
329
|
TestMapper.new.mapped_value('C34.3,R93.2,Z51.5', clean_icd_mapping)
|
330
330
|
end
|
331
331
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'test_helper'
|
3
|
+
require 'ndr_import/universal_importer_helper'
|
4
|
+
|
5
|
+
# This tests the UniversalImporterHelper mixin
|
6
|
+
class UniversalImporterHelperTest < ActiveSupport::TestCase
|
7
|
+
# This is a test importer class to test the excel file helper mixin
|
8
|
+
class TestImporter
|
9
|
+
include NdrImport::UniversalImporterHelper
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@table_mappings = [
|
13
|
+
NdrImport::Table.new(:filename_pattern => /\.xls\z/i,
|
14
|
+
:tablename_pattern => /\Asheet1\z/i)
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_notifier(_)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def setup
|
23
|
+
@permanent_test_files = SafePath.new('permanent_test_files')
|
24
|
+
@test_importer = TestImporter.new
|
25
|
+
end
|
26
|
+
|
27
|
+
test 'extract with matching mapping' do
|
28
|
+
source_file = @permanent_test_files.join('sample_xls.xls')
|
29
|
+
unzip_path = SafePath.new('test_space_rw').to_s
|
30
|
+
enumerator_ran = false
|
31
|
+
@test_importer.extract(source_file, unzip_path) do |table, rows|
|
32
|
+
assert_instance_of NdrImport::Table, table
|
33
|
+
assert_instance_of Enumerator, rows
|
34
|
+
enumerator_ran = true
|
35
|
+
end
|
36
|
+
assert enumerator_ran
|
37
|
+
end
|
38
|
+
|
39
|
+
test 'extract without matching mapping' do
|
40
|
+
source_file = @permanent_test_files.join('sample_xlsx.xlsx')
|
41
|
+
unzip_path = SafePath.new('test_space_rw').to_s
|
42
|
+
enumerator_ran = false
|
43
|
+
@test_importer.extract(source_file, unzip_path) do |_table, _rows|
|
44
|
+
enumerator_ran = true
|
45
|
+
end
|
46
|
+
refute enumerator_ran
|
47
|
+
end
|
48
|
+
|
49
|
+
test 'get_notifier' do
|
50
|
+
class TestImporterWithoutNotifier
|
51
|
+
include NdrImport::UniversalImporterHelper
|
52
|
+
end
|
53
|
+
|
54
|
+
assert_raise(RuntimeError) do
|
55
|
+
TestImporterWithoutNotifier.new.get_notifier(10_000)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
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.1.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: 2016-
|
11
|
+
date: 2016-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 3.2.18
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 5.
|
22
|
+
version: '5.1'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,27 +29,27 @@ dependencies:
|
|
29
29
|
version: 3.2.18
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 5.
|
32
|
+
version: '5.1'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: ndr_support
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
39
|
+
version: 4.1.2
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '6'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
49
|
+
version: 4.1.2
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
52
|
+
version: '6'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: rubyzip
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -300,6 +300,7 @@ files:
|
|
300
300
|
- gemfiles/Gemfile.rails32
|
301
301
|
- gemfiles/Gemfile.rails41
|
302
302
|
- gemfiles/Gemfile.rails42
|
303
|
+
- gemfiles/Gemfile.rails50
|
303
304
|
- lib/ndr_import.rb
|
304
305
|
- lib/ndr_import/csv_library.rb
|
305
306
|
- lib/ndr_import/file/all.rb
|
@@ -327,6 +328,7 @@ files:
|
|
327
328
|
- lib/ndr_import/non_tabular_file_helper.rb
|
328
329
|
- lib/ndr_import/standard_mappings.rb
|
329
330
|
- lib/ndr_import/table.rb
|
331
|
+
- lib/ndr_import/universal_importer_helper.rb
|
330
332
|
- lib/ndr_import/version.rb
|
331
333
|
- ndr_import.gemspec
|
332
334
|
- test/file/base_test.rb
|
@@ -387,6 +389,7 @@ files:
|
|
387
389
|
- test/standard_mappings_test.rb
|
388
390
|
- test/table_test.rb
|
389
391
|
- test/test_helper.rb
|
392
|
+
- test/universal_importer_helper_test.rb
|
390
393
|
homepage: https://github.com/PublicHealthEngland/ndr_import
|
391
394
|
licenses:
|
392
395
|
- MIT
|
@@ -399,7 +402,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
399
402
|
requirements:
|
400
403
|
- - ">="
|
401
404
|
- !ruby/object:Gem::Version
|
402
|
-
version: 2.
|
405
|
+
version: '2.2'
|
403
406
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
404
407
|
requirements:
|
405
408
|
- - ">="
|
@@ -407,7 +410,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
407
410
|
version: '0'
|
408
411
|
requirements: []
|
409
412
|
rubyforge_project:
|
410
|
-
rubygems_version: 2.5
|
413
|
+
rubygems_version: 2.6.5
|
411
414
|
signing_key:
|
412
415
|
specification_version: 4
|
413
416
|
summary: NDR Import
|
@@ -470,3 +473,4 @@ test_files:
|
|
470
473
|
- test/standard_mappings_test.rb
|
471
474
|
- test/table_test.rb
|
472
475
|
- test/test_helper.rb
|
476
|
+
- test/universal_importer_helper_test.rb
|