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 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