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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b9dfb908b8fd54add87023de9f374e6b3a74af9
4
- data.tar.gz: a0d67ce391abf53242f15e221df6cb297f83cb14
3
+ metadata.gz: 8b7020625dad38c6d789cf4b081fa3b770252bad
4
+ data.tar.gz: 145338f57d67c6cf72a12077e8a38918390aac51
5
5
  SHA512:
6
- metadata.gz: 46478e258b56cf0cebe45f8255087bbd48371bb0f4e5a1c30ce69e2b40d1500fa24427f8eea949a21a72ab22ef6e5e147283706d99fbe900f490502422b2b5a5
7
- data.tar.gz: de540d72430687fd0c2731bd810910fc65ba0edf0c05798e6970f437ebbc451b58f9c7a77df35862b830e5b31f973fb3bc264d9646967de42d62a6d6d5db5d41
6
+ metadata.gz: 8b6050f2f7c69de8322113eaf21f96c0fbd97524ac7e0afebd2f9d576f945794add6323d14b53be9fe5cd01317e222305e7a1c9017e715ca8c6d6ce210efa1b4
7
+ data.tar.gz: 9351ef5aedeb46798f73b12b84531c617430b4f9726370a2cfceed5800fca63fb37149043f3ee1b818050160d51acf2f72d6bc70b773dcf6140463ad5167fe82
data/.travis.yml CHANGED
@@ -1,14 +1,14 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 2.1
5
- - 2.2
6
- - 2.3.0
4
+ - 2.2.5
5
+ - 2.3.1
7
6
 
8
7
  gemfile:
9
8
  - gemfiles/Gemfile.rails32
10
9
  - gemfiles/Gemfile.rails41
11
10
  - gemfiles/Gemfile.rails42
11
+ - gemfiles/Gemfile.rails50
12
12
 
13
13
  sudo: false
14
14
 
data/Rakefile CHANGED
@@ -6,7 +6,8 @@ Rake::TestTask.new do |t|
6
6
  t.libs << 'lib'
7
7
  t.libs << 'test'
8
8
  t.pattern = 'test/**/*_test.rb'
9
- t.verbose = true
9
+ t.verbose = false
10
+ t.warning = false
10
11
  end
11
12
 
12
13
  desc 'Run tests'
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: c87afff2ef0c63a1b648037e532b94523f84c0ab
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: a4d925f8c4076fadedbc6a3f5b672dfeca041572
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: joshpencheon
166
- safe_revision: 00e02b83f5ae640becdb98d378eddfb67f8ae5c5
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: 52e4bf7ab1f897a5184a291f64d0926f44272a6a
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: e1cc1153509ac371438aa68708a6c316dbf09eee
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,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'activesupport', '~> 5.0.0'
@@ -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
@@ -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.1'.freeze
4
+ VERSION = '4.1.0'.freeze
5
5
  end
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.0.0'
23
- spec.add_dependency 'ndr_support', '>= 3.3.0', '< 5'
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.1.0'
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' => :code_icd }
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 'C34.3 R93.2 Z51.5',
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.1
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-04-01 00:00:00.000000000 Z
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.0.0
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.0.0
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: 3.3.0
39
+ version: 4.1.2
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '5'
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: 3.3.0
49
+ version: 4.1.2
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '5'
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.1.0
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.1
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