ndr_import 4.0.1 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|