ndr_import 6.4.1 → 7.0.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
  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