ndr_import 8.4.0 → 8.5.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: 1ff3d3bfb186b79ee65c5f10a9c67508bbd91668424197b7dad3f256fbc7c78b
4
- data.tar.gz: 73a0245645a2996d35d0bc3eefcec7c6cdfa37808b9ffb4c82dd49cb70ecc2ab
3
+ metadata.gz: 9190c1ebeb14ff9e86f5fc64510f1bd4a0f6c28290727650b80b975cbac85624
4
+ data.tar.gz: f94476c5853d351c9e12542a00adba3ce708bf4ba7b37c16d1589ecd710a3342
5
5
  SHA512:
6
- metadata.gz: 04d43b45585b8577b98b2b7c77295071a73db86dc1bdd0b213e6479ff8ed5027d7c6dc3248a04dc83d6398f17683e7f0421e5205f46e57d328b5efd57c427fc5
7
- data.tar.gz: 3ac7c8948019c4d45ab0ae2b29e21fca1f21657e845252e659f437b8a81521f052a03aa320089ab1afa33dfdeee2c27d5f97766724c0453fcb15f50f77b52476
6
+ metadata.gz: b8978a404f15132428414b8809b6fb7a98649fa44dde1c339b4df7894203913048a3aae6f69d5613779e5e26dcfb525315751c30d88c8a36870110e55ccd7ccb
7
+ data.tar.gz: dd3dcb71aa46792a49327b95b513f53279e74ae9b52cc2024802f9717d9149f31d1931bf707686840bc9f2301703c672bf14d02da737c39ed93333c8d23cff13
@@ -1,7 +1,12 @@
1
1
  ## [Unreleased]
2
2
  *no unreleased changes*
3
3
 
4
+ ## 8.5.0 / 2019-05-01
5
+ ### Added
6
+ * Allow encypted docx/xlsx files to be read using `:file_password` option (#37)
7
+
4
8
  ## 8.4.0 / 2019-03-15
9
+ ### Added
5
10
  * Added ability to extract and transform PDF form data (#24)
6
11
 
7
12
  ## 8.3.0 / 2019-03-04
data/Gemfile CHANGED
@@ -1,4 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ # ooxml_decrypt is not published to rubygems.org so we need to specify where it is
4
+ gem 'ooxml_decrypt', git: 'https://github.com/timgentry/ooxml_decrypt'
5
+
3
6
  # Specify your gem's dependencies in ndr_import.gemspec
4
7
  gemspec
@@ -15,19 +15,19 @@ file safety:
15
15
  ".travis.yml":
16
16
  comments:
17
17
  reviewed_by: josh.pencheon
18
- safe_revision: 607c0668f1fffd70d181bc1a31c4f56eed5f6189
18
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
19
19
  CHANGELOG.md:
20
20
  comments:
21
21
  reviewed_by: josh.pencheon
22
- safe_revision: 9dd7962195b259862a3294aba3de061b391435eb
22
+ safe_revision: da7a850cb2abe53b7c0d4eaf4950634209999b67
23
23
  CODE_OF_CONDUCT.md:
24
24
  comments:
25
25
  reviewed_by: timgentry
26
26
  safe_revision: 5d185a0aeba6a9cd2ff5e59efadcaeec9be45d8b
27
27
  Gemfile:
28
28
  comments:
29
- reviewed_by: timgentry
30
- safe_revision: a146ca7db90b5e074f7e723b2a6fd1674c5b47ad
29
+ reviewed_by: josh.pencheon
30
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
31
31
  Guardfile:
32
32
  comments:
33
33
  reviewed_by: timgentry
@@ -47,15 +47,15 @@ file safety:
47
47
  gemfiles/Gemfile.rails50:
48
48
  comments:
49
49
  reviewed_by: josh.pencheon
50
- safe_revision: 738577adf8eeacc7a000d08289bd7ae7bf3b5849
50
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
51
51
  gemfiles/Gemfile.rails51:
52
52
  comments:
53
53
  reviewed_by: josh.pencheon
54
- safe_revision: eedd8f5588edd2a9463250fcddc5602f62ab26f1
54
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
55
55
  gemfiles/Gemfile.rails52:
56
56
  comments:
57
57
  reviewed_by: josh.pencheon
58
- safe_revision: c158dc783b84cab31380708e76e3812544cc1c2f
58
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
59
59
  lib/ndr_import.rb:
60
60
  comments:
61
61
  reviewed_by: josh.pencheon
@@ -87,11 +87,15 @@ file safety:
87
87
  lib/ndr_import/file/docx.rb:
88
88
  comments:
89
89
  reviewed_by: josh.pencheon
90
- safe_revision: 1b66cfcbb61dfac93c44889ca0ced5836101c20c
90
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
91
91
  lib/ndr_import/file/excel.rb:
92
92
  comments:
93
- reviewed_by: joshpencheon
94
- safe_revision: e108b1635e41e89e4cba816d47514dcd9d0d6433
93
+ reviewed_by: josh.pencheon
94
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
95
+ lib/ndr_import/file/office_file_helper.rb:
96
+ comments:
97
+ reviewed_by: josh.pencheon
98
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
95
99
  lib/ndr_import/file/pdf.rb:
96
100
  comments:
97
101
  reviewed_by: timgentry
@@ -199,11 +203,11 @@ file safety:
199
203
  lib/ndr_import/table.rb:
200
204
  comments: uses File.basename
201
205
  reviewed_by: josh.pencheon
202
- safe_revision: 04abeab4948a1e889d259d2a71a619af761ac1c3
206
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
203
207
  lib/ndr_import/universal_importer_helper.rb:
204
208
  comments:
205
209
  reviewed_by: josh.pencheon
206
- safe_revision: 3e3a852b58e8b169535e29029e535a10f6b9cd42
210
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
207
211
  lib/ndr_import/unmapped_data_error.rb:
208
212
  comments:
209
213
  reviewed_by: josh.pencheon
@@ -211,7 +215,7 @@ file safety:
211
215
  lib/ndr_import/version.rb:
212
216
  comments: another check?
213
217
  reviewed_by: josh.pencheon
214
- safe_revision: 9dd7962195b259862a3294aba3de061b391435eb
218
+ safe_revision: da7a850cb2abe53b7c0d4eaf4950634209999b67
215
219
  lib/ndr_import/xml/table.rb:
216
220
  comments:
217
221
  reviewed_by: josh.pencheon
@@ -219,7 +223,7 @@ file safety:
219
223
  ndr_import.gemspec:
220
224
  comments:
221
225
  reviewed_by: josh.pencheon
222
- safe_revision: 607c0668f1fffd70d181bc1a31c4f56eed5f6189
226
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
223
227
  test/file/acro_form_test.rb:
224
228
  comments:
225
229
  reviewed_by: josh.pencheon
@@ -231,15 +235,15 @@ file safety:
231
235
  test/file/delimited_test.rb:
232
236
  comments:
233
237
  reviewed_by: josh.pencheon
234
- safe_revision: 607c0668f1fffd70d181bc1a31c4f56eed5f6189
238
+ safe_revision: 93ccee82fc2165d1ca2d9b03d146ae03e769ea96
235
239
  test/file/docx_test.rb:
236
240
  comments:
237
241
  reviewed_by: josh.pencheon
238
- safe_revision: 1b66cfcbb61dfac93c44889ca0ced5836101c20c
242
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
239
243
  test/file/excel_test.rb:
240
244
  comments:
241
- reviewed_by: joshpencheon
242
- safe_revision: 334d53bb9e8698bba3d92b4dbd71b36faacae629
245
+ reviewed_by: josh.pencheon
246
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
243
247
  test/file/pdf_test.rb:
244
248
  comments:
245
249
  reviewed_by: josh.pencheon
@@ -275,7 +279,7 @@ file safety:
275
279
  test/helpers/file/delimited_test.rb:
276
280
  comments:
277
281
  reviewed_by: josh.pencheon
278
- safe_revision: 607c0668f1fffd70d181bc1a31c4f56eed5f6189
282
+ safe_revision: 93ccee82fc2165d1ca2d9b03d146ae03e769ea96
279
283
  test/helpers/file/excel_test.rb:
280
284
  comments:
281
285
  reviewed_by: joshpencheon
@@ -307,7 +311,7 @@ file safety:
307
311
  test/non_tabular/table_test.rb:
308
312
  comments:
309
313
  reviewed_by: josh.pencheon
310
- safe_revision: fac9e62618a32fab7a09a4996d27e1e7437b7dfb
314
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
311
315
  test/non_tabular_file_helper_test.rb:
312
316
  comments:
313
317
  reviewed_by: timgentry
@@ -440,6 +444,14 @@ file safety:
440
444
  comments:
441
445
  reviewed_by: josh.pencheon
442
446
  safe_revision: 902f5326d85372d9632de9869d6f56fc02b83a10
447
+ test/resources/password_protected_hello_world.docx:
448
+ comments:
449
+ reviewed_by: josh.pencheon
450
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
451
+ test/resources/password_protected_sample_xlsx.xlsx:
452
+ comments:
453
+ reviewed_by: josh.pencheon
454
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
443
455
  test/resources/sample.xml:
444
456
  comments:
445
457
  reviewed_by: josh.pencheon
@@ -507,11 +519,11 @@ file safety:
507
519
  test/table_test.rb:
508
520
  comments:
509
521
  reviewed_by: josh.pencheon
510
- safe_revision: 04abeab4948a1e889d259d2a71a619af761ac1c3
522
+ safe_revision: a69d4a57ddcf13cdc13c27bd2eb91a395fa7ea36
511
523
  test/test_helper.rb:
512
524
  comments:
513
525
  reviewed_by: josh.pencheon
514
- safe_revision: 72750275da2193cc9ed362da85b88e9b5054f2d7
526
+ safe_revision: 93ccee82fc2165d1ca2d9b03d146ae03e769ea96
515
527
  test/universal_importer_helper_test.rb:
516
528
  comments:
517
529
  reviewed_by: josh.pencheon
@@ -1,5 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ # ooxml_decrypt is not published to rubygems.org so we need to specify where it is
4
+ gem 'ooxml_decrypt', git: 'https://github.com/timgentry/ooxml_decrypt'
5
+
3
6
  gemspec path: '..'
4
7
 
5
8
  gem 'activesupport', '~> 5.0.0'
@@ -1,5 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ # ooxml_decrypt is not published to rubygems.org so we need to specify where it is
4
+ gem 'ooxml_decrypt', git: 'https://github.com/timgentry/ooxml_decrypt'
5
+
3
6
  gemspec path: '..'
4
7
 
5
8
  # Minitest 5.10.2 doesn't work with Rails version
@@ -1,5 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ # ooxml_decrypt is not published to rubygems.org so we need to specify where it is
4
+ gem 'ooxml_decrypt', git: 'https://github.com/timgentry/ooxml_decrypt'
5
+
3
6
  gemspec path: '..'
4
7
 
5
8
  gem 'activesupport', '~> 5.2.0'
@@ -1,5 +1,6 @@
1
1
  require 'docx'
2
2
  require 'ndr_support/safe_file'
3
+ require_relative 'office_file_helper'
3
4
  require_relative 'registry'
4
5
 
5
6
  module NdrImport
@@ -9,19 +10,40 @@ module NdrImport
9
10
  # This class is a modern Word document file handler that returns a single table.
10
11
  # It only works on .docx documents
11
12
  class Docx < Base
13
+ include OfficeFileHelper
14
+
12
15
  private
13
16
 
14
17
  def rows(&block)
15
18
  return enum_for(:rows) unless block
16
19
 
17
- doc = ::Docx::Document.open(SafeFile.safepath_to_string(@filename))
20
+ send(@options.key?(:file_password) ? :decrypted_path : :unencrypted_path) do |path|
21
+ doc = ::Docx::Document.open(path)
22
+
23
+ doc.paragraphs.each do |p|
24
+ yield(p.to_s)
25
+ end
18
26
 
19
- doc.paragraphs.each do |p|
20
- yield(p.to_s)
27
+ doc.zip.close
21
28
  end
22
29
  rescue StandardError => e
23
30
  raise("#{SafeFile.basename(@filename)} [#{e.class}: #{e.message}]")
24
31
  end
32
+
33
+ # This method returns the path to the temporary, decrypted file
34
+ def decrypted_path
35
+ Tempfile.create(['decrypted', '.docx']) do |file|
36
+ file.write(decrypted_file_string(@filename, @options[:file_password]))
37
+ file.close
38
+
39
+ yield file.path
40
+ end
41
+ end
42
+
43
+ # This method returns the safepath to the unencrypted docx file
44
+ def unencrypted_path
45
+ yield SafeFile.safepath_to_string(@filename)
46
+ end
25
47
  end
26
48
 
27
49
  Registry.register(Docx, 'docx')
@@ -2,6 +2,7 @@ require 'roo'
2
2
  require 'roo-xls'
3
3
  require 'ole/storage'
4
4
  require 'ndr_support/safe_file'
5
+ require_relative 'office_file_helper'
5
6
  require_relative 'registry'
6
7
 
7
8
  module NdrImport
@@ -13,6 +14,8 @@ module NdrImport
13
14
  # appropriately. These methods can be overridden or aliased as required.
14
15
  #
15
16
  class Excel < Base
17
+ include OfficeFileHelper
18
+
16
19
  # Iterate through the file table by table, yielding each one in turn.
17
20
  def tables
18
21
  return enum_for(:tables) unless block_given?
@@ -88,7 +91,11 @@ module NdrImport
88
91
  when '.xls'
89
92
  Roo::Excel.new(SafeFile.safepath_to_string(path))
90
93
  when '.xlsx'
91
- Roo::Excelx.new(SafeFile.safepath_to_string(path))
94
+ if @options.key?(:file_password)
95
+ Roo::Excelx.new(StringIO.new(decrypted_file_string(path, @options[:file_password])))
96
+ else
97
+ Roo::Excelx.new(SafeFile.safepath_to_string(path))
98
+ end
92
99
  else
93
100
  fail "Received file path with unexpected extension #{SafeFile.extname(path)}"
94
101
  end
@@ -0,0 +1,20 @@
1
+ require 'ooxml_decrypt'
2
+
3
+ module NdrImport
4
+ module File
5
+ # This mixin provides helper methods of MS Office files
6
+ module OfficeFileHelper
7
+ private
8
+
9
+ # This method decrypts a (modern) password protected MS Office document
10
+ # returning a String of the decrypted file
11
+ def decrypted_file_string(path, password)
12
+ # Ensure password is a binary representation of a UTF-16LE string
13
+ # e.g. 'password' should be represented as "p\0\a\s\0[...]"
14
+ password = password.encode('utf-16le').bytes.pack('c*').encode('binary')
15
+
16
+ OoxmlDecrypt::EncryptedFile.decrypt(SafeFile.safepath_to_string(path), password)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -10,8 +10,8 @@ module NdrImport
10
10
  include NdrImport::Mapper
11
11
 
12
12
  def self.all_valid_options
13
- %w[canonical_name delimiter liberal_parsing filename_pattern tablename_pattern header_lines
14
- footer_lines format klass columns xml_record_xpath row_identifier]
13
+ %w[canonical_name delimiter liberal_parsing filename_pattern file_password tablename_pattern
14
+ header_lines footer_lines format klass columns xml_record_xpath row_identifier]
15
15
  end
16
16
 
17
17
  def all_valid_options
@@ -36,6 +36,7 @@ module NdrImport
36
36
  options = {
37
37
  'unzip_path' => unzip_path,
38
38
  'col_sep' => table_mapping.try(:delimiter),
39
+ 'file_password' => table_mapping.try(:file_password),
39
40
  'liberal_parsing' => table_mapping.try(:liberal_parsing),
40
41
  'xml_record_xpath' => table_mapping.try(:xml_record_xpath)
41
42
  }
@@ -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 = '8.4.0'.freeze
4
+ VERSION = '8.5.0'.freeze
5
5
  end
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency 'docx', '~> 0.3'
31
31
  spec.add_dependency 'msworddoc-extractor', '0.2.0'
32
32
  spec.add_dependency 'nokogiri', '~> 1.8', '>= 1.8.5'
33
+ spec.add_dependency 'ooxml_decrypt'
33
34
  spec.add_dependency 'pdf-reader', '~> 2.1'
34
35
  spec.add_dependency 'roo-xls'
35
36
  spec.add_dependency 'seven_zip_ruby', '~> 1.2'
@@ -37,7 +38,7 @@ Gem::Specification.new do |spec|
37
38
 
38
39
  spec.required_ruby_version = '>= 2.4'
39
40
 
40
- spec.add_development_dependency 'bundler', '~> 1.7'
41
+ spec.add_development_dependency 'bundler'
41
42
  spec.add_development_dependency 'rake', '~> 10.0'
42
43
  spec.add_development_dependency 'minitest'
43
44
  spec.add_development_dependency 'mocha'
@@ -186,7 +186,7 @@ module NdrImport
186
186
  end
187
187
 
188
188
  assert_match(/Invalid CSV format on row 2 of broken\.csv\./, exception.message)
189
- assert_match(/(Missing or stray quote|col_sep_split)/, exception.message)
189
+ assert_match(CORRUPTED_QUOTES_MESSAGE_PATTERN, exception.message)
190
190
  assert_match(/in line 2/, exception.message)
191
191
  end
192
192
 
@@ -208,7 +208,7 @@ module NdrImport
208
208
  assert rows_yielded.empty?, 'no rows should have been yielded'
209
209
 
210
210
  assert_match(/Invalid CSV format on row 2 of broken\.csv\./, exception.message)
211
- assert_match(/(Missing or stray quote|col_sep_split)/, exception.message)
211
+ assert_match(CORRUPTED_QUOTES_MESSAGE_PATTERN, exception.message)
212
212
  assert_match(/in line 2/, exception.message)
213
213
  end
214
214
 
@@ -23,6 +23,20 @@ module NdrImport
23
23
  end
24
24
  end
25
25
 
26
+ test 'should read password protected word file' do
27
+ file_path = @permanent_test_files.join('password_protected_hello_world.docx')
28
+ handler = NdrImport::File::Docx.new(file_path, nil, file_password: 'salad')
29
+ handler.tables.each do |tablename, sheet|
30
+ assert_nil tablename
31
+ assert_instance_of Enumerator, sheet
32
+ assert_equal [
33
+ 'Hello world, this is a modern word document',
34
+ 'With more than one line of text',
35
+ 'Three in fact'
36
+ ], sheet.to_a
37
+ end
38
+ end
39
+
26
40
  test 'should raise exception on invalid word file' do
27
41
  assert_raises RuntimeError do
28
42
  file_path = @permanent_test_files.join('not_a_word_file.docx')
@@ -70,6 +70,16 @@ module NdrImport
70
70
  SafeFile.delete @permanent_test_files.join('xlsx_file_xls_extension_amend.xlsx')
71
71
  end
72
72
 
73
+ test 'should read password protected xlsx file' do
74
+ file_path = @permanent_test_files.join('password_protected_sample_xlsx.xlsx')
75
+ handler = NdrImport::File::Excel.new(file_path, nil, file_password: 'carrot')
76
+ handler.tables.each do |tablename, sheet|
77
+ assert_equal 'Sheet1', tablename
78
+ assert_instance_of Enumerator, sheet
79
+ assert_equal %w(1A 1B), sheet.first
80
+ end
81
+ end
82
+
73
83
  test 'read_excel_file helper should handle exceptions' do
74
84
  # txt file
75
85
  assert_raises RuntimeError do
@@ -60,7 +60,7 @@ class DelimitedTest < ActiveSupport::TestCase
60
60
  end
61
61
 
62
62
  assert_match(/Invalid CSV format on row 2 of broken\.csv\./, exception.message)
63
- assert_match(/(Missing or stray quote|col_sep_split)/, exception.message)
63
+ assert_match(CORRUPTED_QUOTES_MESSAGE_PATTERN, exception.message)
64
64
  assert_match(/in line 2/, exception.message)
65
65
  end
66
66
 
@@ -88,7 +88,7 @@ class DelimitedTest < ActiveSupport::TestCase
88
88
  assert rows_yielded.empty?, 'no rows should have been yielded'
89
89
 
90
90
  assert_match(/Invalid CSV format on row 2 of broken\.csv\./, exception.message)
91
- assert_match(/(Missing or stray quote|col_sep_split)/, exception.message)
91
+ assert_match(CORRUPTED_QUOTES_MESSAGE_PATTERN, exception.message)
92
92
  assert_match(/in line 2/, exception.message)
93
93
  end
94
94
 
@@ -49,7 +49,8 @@ STR
49
49
  def test_all_valid_options
50
50
  valid_options = %w[
51
51
  canonical_name capture_end_line capture_start_line columns end_in_a_record end_line_pattern
52
- filename_pattern format klass remove_lines row_identifier start_in_a_record start_line_pattern
52
+ filename_pattern file_password format klass remove_lines row_identifier start_in_a_record
53
+ start_line_pattern
53
54
  ]
54
55
  assert_equal valid_options.sort,
55
56
  NdrImport::NonTabular::Table.all_valid_options.sort
@@ -19,14 +19,15 @@ class TableTest < ActiveSupport::TestCase
19
19
  end
20
20
 
21
21
  def test_initialize
22
- table = NdrImport::Table.new(:header_lines => 2, :footer_lines => 1,
23
- :format => 'pipe', :klass => 'SomeTestKlass',
24
- :columns => [{ 'column' => 'one' }, { 'column' => 'two' }])
22
+ table = NdrImport::Table.new(header_lines: 2, file_password: 'leek', footer_lines: 1,
23
+ format: 'pipe', klass: 'SomeTestKlass',
24
+ columns: [{ 'column' => 'one' }, { 'column' => 'two' }])
25
25
  assert_instance_of NdrImport::Table, table
26
26
  assert_equal 2, table.header_lines
27
27
  assert_equal 1, table.footer_lines
28
28
  assert_equal 'pipe', table.format
29
29
  assert_equal 'SomeTestKlass', table.klass
30
+ assert_equal 'leek', table.file_password
30
31
  assert_equal [{ 'column' => 'one' }, { 'column' => 'two' }], table.columns
31
32
  end
32
33
 
@@ -25,4 +25,11 @@ NdrImport::StandardMappings.mappings = YAML.load_file(
25
25
  File.expand_path(File.dirname(__FILE__) + '/resources/standard_mappings.yml')
26
26
  )
27
27
 
28
+ # Different Rubies report this differently:
29
+ CORRUPTED_QUOTES_MESSAGE_PATTERN = /(
30
+ Missing\sor\sstray\squote|
31
+ col_sep_split|
32
+ value\safter\squoted\sfield\sisn't\sallowed
33
+ )/x
34
+
28
35
  require 'mocha/minitest'
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: 8.4.0
4
+ version: 8.5.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: 2019-03-15 00:00:00.000000000 Z
11
+ date: 2019-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -140,6 +140,20 @@ dependencies:
140
140
  - - ">="
141
141
  - !ruby/object:Gem::Version
142
142
  version: 1.8.5
143
+ - !ruby/object:Gem::Dependency
144
+ name: ooxml_decrypt
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
143
157
  - !ruby/object:Gem::Dependency
144
158
  name: pdf-reader
145
159
  requirement: !ruby/object:Gem::Requirement
@@ -200,16 +214,16 @@ dependencies:
200
214
  name: bundler
201
215
  requirement: !ruby/object:Gem::Requirement
202
216
  requirements:
203
- - - "~>"
217
+ - - ">="
204
218
  - !ruby/object:Gem::Version
205
- version: '1.7'
219
+ version: '0'
206
220
  type: :development
207
221
  prerelease: false
208
222
  version_requirements: !ruby/object:Gem::Requirement
209
223
  requirements:
210
- - - "~>"
224
+ - - ">="
211
225
  - !ruby/object:Gem::Version
212
- version: '1.7'
226
+ version: '0'
213
227
  - !ruby/object:Gem::Dependency
214
228
  name: rake
215
229
  requirement: !ruby/object:Gem::Requirement
@@ -371,6 +385,7 @@ files:
371
385
  - lib/ndr_import/file/delimited.rb
372
386
  - lib/ndr_import/file/docx.rb
373
387
  - lib/ndr_import/file/excel.rb
388
+ - lib/ndr_import/file/office_file_helper.rb
374
389
  - lib/ndr_import/file/pdf.rb
375
390
  - lib/ndr_import/file/registry.rb
376
391
  - lib/ndr_import/file/seven_zip.rb
@@ -458,6 +473,8 @@ files:
458
473
  - test/resources/not_a_word_file.doc
459
474
  - test/resources/not_a_word_file.docx
460
475
  - test/resources/not_sign_delimited.txt
476
+ - test/resources/password_protected_hello_world.docx
477
+ - test/resources/password_protected_sample_xlsx.xlsx
461
478
  - test/resources/sample.xml
462
479
  - test/resources/sample_xls.xls
463
480
  - test/resources/sample_xlsx.xlsx
@@ -497,7 +514,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
497
514
  - !ruby/object:Gem::Version
498
515
  version: '0'
499
516
  requirements: []
500
- rubygems_version: 3.0.2
517
+ rubygems_version: 3.0.3
501
518
  signing_key:
502
519
  specification_version: 4
503
520
  summary: NDR Import
@@ -557,6 +574,8 @@ test_files:
557
574
  - test/resources/not_a_word_file.doc
558
575
  - test/resources/not_a_word_file.docx
559
576
  - test/resources/not_sign_delimited.txt
577
+ - test/resources/password_protected_hello_world.docx
578
+ - test/resources/password_protected_sample_xlsx.xlsx
560
579
  - test/resources/sample.xml
561
580
  - test/resources/sample_xls.xls
562
581
  - test/resources/sample_xlsx.xlsx