ndr_import 6.4.1 → 7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4a3d81eb60f8edbb23c9bcb3a3c9563e2af8727d3556bd903c74acfe799e1b5
4
- data.tar.gz: d21272466eb8916ffd83dccd200f7e1b9a37d0104111472137b083c44dc2d356
3
+ metadata.gz: 1a5dd34ac83682dce8b3bd5d53f3610c750e3db86defc7e6f808738d4c6a47d9
4
+ data.tar.gz: 942ca0f0d52d949c39d338938a6ab1d354f1c037675bcb8bae940c9357e672a0
5
5
  SHA512:
6
- metadata.gz: bd72bcca29c9e8215939a53c5a48f63752ba1c859b0ec06b6a384831615a3f2d8e0ff3d7567842bf4806c65e25ee08987d02e6a3660c764998adf1d31990de65
7
- data.tar.gz: 6210a99d38241e29c33a06ee94093ce6ada95cf79e9ecc0ed8532700c44434b063197adde1c5f9b7a202168f9c0d329de75039472dff22da815564afc004bf53
6
+ metadata.gz: 370e387ead245e596ac48c4d9669e86083754e43b3d9521b20501a13569286c3820e8a699b3492121410b4de2ceada0e9c9957d3e07469afc95820f42ab3ffaa
7
+ data.tar.gz: 1e74f1eb05e132fd611250730c5f720d10930488401f07774bd12afa853dde31f22e0d1e54e3fd0d24f93a77633b8136e852932a8fc634057fda4ccba7954113
data/code_safety.yml CHANGED
@@ -183,11 +183,11 @@ file safety:
183
183
  lib/ndr_import/universal_importer_helper.rb:
184
184
  comments:
185
185
  reviewed_by: josh.pencheon
186
- safe_revision: 71979e0a602ca5a0ce415c194f10add9959f0116
186
+ safe_revision: 3e3a852b58e8b169535e29029e535a10f6b9cd42
187
187
  lib/ndr_import/version.rb:
188
188
  comments: another check?
189
189
  reviewed_by: josh.pencheon
190
- safe_revision: c830ea8f3fa25efe88eb8712573ff6933978bdeb
190
+ safe_revision: 3f1743adb7a0ae612e480ffb9b39ba14bfb0493f
191
191
  lib/ndr_import/xml/table.rb:
192
192
  comments:
193
193
  reviewed_by: josh.pencheon
@@ -195,7 +195,7 @@ file safety:
195
195
  ndr_import.gemspec:
196
196
  comments:
197
197
  reviewed_by: josh.pencheon
198
- safe_revision: 2cb4ecf1f8d8e86e9f34871782b96590665b5cf0
198
+ safe_revision: cb24ed3ea8116730d07f74546cd6fed0738b171d
199
199
  test/file/base_test.rb:
200
200
  comments:
201
201
  reviewed_by: timgentry
@@ -215,11 +215,11 @@ file safety:
215
215
  test/file/pdf_test.rb:
216
216
  comments:
217
217
  reviewed_by: josh.pencheon
218
- safe_revision: f82e6839f7e3f9932a6f92242c03d94234fc1d82
218
+ safe_revision: cb24ed3ea8116730d07f74546cd6fed0738b171d
219
219
  test/file/registry_test.rb:
220
220
  comments:
221
221
  reviewed_by: josh.pencheon
222
- safe_revision: 4ab72f84201c2d5f0147b7dfd041f488f6ff0422
222
+ safe_revision: cb24ed3ea8116730d07f74546cd6fed0738b171d
223
223
  test/file/text_test.rb:
224
224
  comments:
225
225
  reviewed_by: timgentry
@@ -251,7 +251,7 @@ file safety:
251
251
  test/helpers/file/pdf_test.rb:
252
252
  comments:
253
253
  reviewed_by: josh.pencheon
254
- safe_revision: f82e6839f7e3f9932a6f92242c03d94234fc1d82
254
+ safe_revision: cb24ed3ea8116730d07f74546cd6fed0738b171d
255
255
  test/helpers/file/word_test.rb:
256
256
  comments:
257
257
  reviewed_by: timgentry
@@ -471,7 +471,7 @@ file safety:
471
471
  test/universal_importer_helper_test.rb:
472
472
  comments:
473
473
  reviewed_by: josh.pencheon
474
- safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
474
+ safe_revision: 3e3a852b58e8b169535e29029e535a10f6b9cd42
475
475
  test/xml/table_test.rb:
476
476
  comments:
477
477
  reviewed_by: josh.pencheon
@@ -3,6 +3,7 @@ require 'ndr_import/file/registry'
3
3
  module NdrImport
4
4
  # This mixin provides file importer helper methods that abstract away some of the
5
5
  # complexity of enumerating over files and tables (which should be universally useful).
6
+ # It is assumed that the host module/class defines `unzip_path`.
6
7
  module UniversalImporterHelper
7
8
  def table_enumerators(filename)
8
9
  table_enumerators = {}
@@ -23,8 +24,8 @@ module NdrImport
23
24
 
24
25
  # Iterate through the file(s) line by line, yielding each one in turn, using
25
26
  # 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
27
+ def extract(source_file, &block)
28
+ return enum_for(:extract, source_file) unless block
28
29
 
29
30
  files = NdrImport::File::Registry.files(source_file,
30
31
  'unzip_path' => unzip_path)
@@ -47,20 +48,35 @@ module NdrImport
47
48
  # This method does the table row yielding for the extract method, setting the notifier
48
49
  # so that we can monitor progress
49
50
  def yield_tables_and_their_content(filename, tables, &block)
51
+ return enum_for(:yield_tables_and_their_content, filename, tables) unless block_given?
52
+
50
53
  tables.each do |tablename, table_content|
51
54
  mapping = get_table_mapping(filename, tablename)
52
55
  next if mapping.nil?
53
56
 
54
- total_records = table_content.count unless table_content.is_a?(Enumerator)
55
- mapping.notifier = get_notifier(total_records)
57
+ mapping.notifier = get_notifier(record_total(filename, table_content))
56
58
 
57
59
  yield(mapping, table_content)
58
60
  end
59
61
  end
60
62
 
63
+ def mapped_tables(filename)
64
+ @mapped_tables ||= table_enumerators(filename)
65
+ end
66
+
61
67
  # This method needs to be implemented where this mixin is used.
62
68
  def get_notifier(_total_records)
63
- fail 'Implement get_notifier'
69
+ raise NotImplementedError, 'get_notifier must be defined!'
70
+ end
71
+
72
+ def record_total(filename, table_content)
73
+ if '.csv' == ::File.extname(filename).downcase
74
+ return `wc -l #{Shellwords.escape(filename)}`.strip.match(/\A(\d+)/)[1].to_i
75
+ elsif table_content.is_a?(Enumerator)
76
+ nil # Avoid slurping
77
+ else
78
+ table_content.size
79
+ end
64
80
  end
65
81
  end
66
82
  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 = '6.4.1'.freeze
4
+ VERSION = '7.0.0'.freeze
5
5
  end
data/ndr_import.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.add_dependency 'docx', '~> 0.3'
30
30
  spec.add_dependency 'msworddoc-extractor', '0.2.0'
31
31
  spec.add_dependency 'nokogiri', '~> 1.8', '>= 1.8.5'
32
- spec.add_dependency 'pdf-reader', '1.2.0' # Raises warnings on Ruby 2.4+
32
+ spec.add_dependency 'pdf-reader', '~> 2.1'
33
33
  spec.add_dependency 'roo-xls'
34
34
  spec.add_dependency 'spreadsheet', '1.0.3'
35
35
 
@@ -15,7 +15,8 @@ module NdrImport
15
15
  handler.tables.each do |tablename, sheet|
16
16
  assert_nil tablename
17
17
  assert_instance_of Enumerator, sheet
18
- assert_equal ['Hello World ', 'Goodbye Universe ', ' '], sheet.to_a
18
+ assert_equal ['Hello World', '',
19
+ 'Goodbye Universe'], sheet.to_a
19
20
  end
20
21
  end
21
22
 
@@ -35,7 +35,8 @@ module NdrImport
35
35
  tables.each do |tablename, sheet|
36
36
  assert_nil tablename
37
37
  assert_instance_of Enumerator, sheet
38
- assert_equal ['Hello World ', 'Goodbye Universe ', ' '], sheet.to_a
38
+ assert_equal ['Hello World', '',
39
+ 'Goodbye Universe'], sheet.to_a
39
40
  end
40
41
  end
41
42
 
@@ -15,7 +15,8 @@ class PdfTest < ActiveSupport::TestCase
15
15
 
16
16
  test 'read_pdf_file helper should read pdf file' do
17
17
  file_content = @importer.send(:read_pdf_file, @permanent_test_files.join('hello_world.pdf'))
18
- assert_equal ['Hello World ', 'Goodbye Universe ', ' '], file_content
18
+ assert_equal ['Hello World', '',
19
+ 'Goodbye Universe'], file_content
19
20
  end
20
21
 
21
22
  test 'read_pdf_file helper should raise exception on invalid pdf file' do
@@ -17,6 +17,10 @@ class UniversalImporterHelperTest < ActiveSupport::TestCase
17
17
 
18
18
  def get_notifier(_)
19
19
  end
20
+
21
+ def unzip_path
22
+ SafePath.new('test_space_rw')
23
+ end
20
24
  end
21
25
 
22
26
  def setup
@@ -26,9 +30,8 @@ class UniversalImporterHelperTest < ActiveSupport::TestCase
26
30
 
27
31
  test 'extract with matching mapping' do
28
32
  source_file = @permanent_test_files.join('sample_xls.xls')
29
- unzip_path = SafePath.new('test_space_rw').to_s
30
33
  enumerator_ran = false
31
- @test_importer.extract(source_file, unzip_path) do |table, rows|
34
+ @test_importer.extract(source_file) do |table, rows|
32
35
  assert_instance_of NdrImport::Table, table
33
36
  assert_instance_of Enumerator, rows
34
37
  enumerator_ran = true
@@ -38,9 +41,8 @@ class UniversalImporterHelperTest < ActiveSupport::TestCase
38
41
 
39
42
  test 'extract without matching mapping' do
40
43
  source_file = @permanent_test_files.join('sample_xlsx.xlsx')
41
- unzip_path = SafePath.new('test_space_rw').to_s
42
44
  enumerator_ran = false
43
- @test_importer.extract(source_file, unzip_path) do |_table, _rows|
45
+ @test_importer.extract(source_file) do |_table, _rows|
44
46
  enumerator_ran = true
45
47
  end
46
48
  refute enumerator_ran
@@ -59,9 +61,8 @@ class UniversalImporterHelperTest < ActiveSupport::TestCase
59
61
  { 'column' => 'three' }])
60
62
  ]
61
63
  source_file = @permanent_test_files.join('not_sign_delimited.txt')
62
- unzip_path = SafePath.new('test_space_rw').to_s
63
64
  @test_importer.stubs(:get_table_mapping).returns(table_mappings.first)
64
- @test_importer.extract(source_file, unzip_path) do |table, rows|
65
+ @test_importer.extract(source_file) do |table, rows|
65
66
  mapped_rows = table.transform(rows)
66
67
 
67
68
  assert_instance_of NdrImport::Table, table
@@ -78,7 +79,7 @@ class UniversalImporterHelperTest < ActiveSupport::TestCase
78
79
  include NdrImport::UniversalImporterHelper
79
80
  end
80
81
 
81
- assert_raise(RuntimeError) do
82
+ assert_raise(NotImplementedError) do
82
83
  TestImporterWithoutNotifier.new.get_notifier(10_000)
83
84
  end
84
85
  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: 6.4.1
4
+ version: 7.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-10-18 00:00:00.000000000 Z
11
+ date: 2018-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -136,16 +136,16 @@ dependencies:
136
136
  name: pdf-reader
137
137
  requirement: !ruby/object:Gem::Requirement
138
138
  requirements:
139
- - - '='
139
+ - - "~>"
140
140
  - !ruby/object:Gem::Version
141
- version: 1.2.0
141
+ version: '2.1'
142
142
  type: :runtime
143
143
  prerelease: false
144
144
  version_requirements: !ruby/object:Gem::Requirement
145
145
  requirements:
146
- - - '='
146
+ - - "~>"
147
147
  - !ruby/object:Gem::Version
148
- version: 1.2.0
148
+ version: '2.1'
149
149
  - !ruby/object:Gem::Dependency
150
150
  name: roo-xls
151
151
  requirement: !ruby/object:Gem::Requirement