ndr_import 8.5.0 → 8.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile +0 -3
  4. data/README.md +6 -0
  5. data/bin/console +14 -0
  6. data/bin/setup +8 -0
  7. data/code_safety.yml +27 -11
  8. data/exe/pdf_acro_form_to_yaml +23 -0
  9. data/exe/pdf_to_text +28 -0
  10. data/exe/word_to_text +26 -0
  11. data/gemfiles/Gemfile.rails52 +0 -3
  12. data/gemfiles/Gemfile.rails60 +5 -0
  13. data/lib/ndr_import/version.rb +1 -1
  14. data/ndr_import.gemspec +9 -7
  15. metadata +23 -164
  16. data/gemfiles/Gemfile.rails50 +0 -8
  17. data/gemfiles/Gemfile.rails51 +0 -9
  18. data/test/file/acro_form_test.rb +0 -39
  19. data/test/file/base_test.rb +0 -54
  20. data/test/file/delimited_test.rb +0 -233
  21. data/test/file/docx_test.rb +0 -53
  22. data/test/file/excel_test.rb +0 -124
  23. data/test/file/pdf_test.rb +0 -36
  24. data/test/file/registry_test.rb +0 -62
  25. data/test/file/seven_zip_test.rb +0 -59
  26. data/test/file/text_test.rb +0 -92
  27. data/test/file/word_test.rb +0 -35
  28. data/test/file/xml_test.rb +0 -21
  29. data/test/file/zip_test.rb +0 -47
  30. data/test/fixed_width/table_test.rb +0 -35
  31. data/test/helpers/file/delimited_test.rb +0 -105
  32. data/test/helpers/file/excel_test.rb +0 -82
  33. data/test/helpers/file/pdf_test.rb +0 -27
  34. data/test/helpers/file/word_test.rb +0 -26
  35. data/test/helpers/file/xml_test.rb +0 -131
  36. data/test/helpers/file/zip_test.rb +0 -75
  37. data/test/mapper_test.rb +0 -676
  38. data/test/non_tabular/mapping_test.rb +0 -36
  39. data/test/non_tabular/table_test.rb +0 -590
  40. data/test/non_tabular_file_helper_test.rb +0 -501
  41. data/test/pdf_form/table_test.rb +0 -119
  42. data/test/readme_test.rb +0 -53
  43. data/test/resources/acro_form.pdf +0 -0
  44. data/test/resources/blank_tab_test.xlsx +0 -0
  45. data/test/resources/bomd.csv +0 -3
  46. data/test/resources/broken.csv +0 -3
  47. data/test/resources/filesystem_paths.yml +0 -26
  48. data/test/resources/flat_file.pdf +0 -0
  49. data/test/resources/flat_file.txt +0 -27
  50. data/test/resources/flat_file.yml +0 -20
  51. data/test/resources/hello_utf16be.txt +0 -0
  52. data/test/resources/hello_utf16le.txt +0 -0
  53. data/test/resources/hello_utf8.txt +0 -2
  54. data/test/resources/hello_windows.txt +0 -2
  55. data/test/resources/hello_world.doc +0 -0
  56. data/test/resources/hello_world.docx +0 -0
  57. data/test/resources/hello_world.pdf +0 -0
  58. data/test/resources/hello_world.txt +0 -2
  59. data/test/resources/high_ascii_delimited.txt +0 -2
  60. data/test/resources/high_ascii_delimited_example_two.txt +0 -3
  61. data/test/resources/malformed.csv +0 -3
  62. data/test/resources/malformed.xml +0 -6
  63. data/test/resources/malformed_pipe.csv +0 -3
  64. data/test/resources/normal.7z +0 -0
  65. data/test/resources/normal.csv +0 -3
  66. data/test/resources/normal.csv.zip +0 -0
  67. data/test/resources/normal_pipe.csv +0 -3
  68. data/test/resources/normal_thorn.csv +0 -3
  69. data/test/resources/not_a_pdf.pdf +0 -0
  70. data/test/resources/not_a_word_file.doc +0 -0
  71. data/test/resources/not_a_word_file.docx +0 -0
  72. data/test/resources/not_sign_delimited.txt +0 -3
  73. data/test/resources/password_protected_hello_world.docx +0 -0
  74. data/test/resources/password_protected_sample_xlsx.xlsx +0 -0
  75. data/test/resources/sample.xml +0 -34
  76. data/test/resources/sample_xls.xls +0 -0
  77. data/test/resources/sample_xlsx.xlsx +0 -0
  78. data/test/resources/sheet_streaming.xls +0 -0
  79. data/test/resources/sheet_streaming.xlsx +0 -0
  80. data/test/resources/standard_mappings.yml +0 -39
  81. data/test/resources/txt_file_xls_extension.xls +0 -1
  82. data/test/resources/txt_file_xlsx_extension.xlsx +0 -1
  83. data/test/resources/utf-16be_xml.xml +0 -0
  84. data/test/resources/utf-16be_xml_with_declaration.xml +0 -0
  85. data/test/resources/utf-16le_xml.xml +0 -0
  86. data/test/resources/utf-8_xml.xml +0 -9
  87. data/test/resources/windows-1252_xml.xml +0 -9
  88. data/test/resources/windows.csv +0 -5
  89. data/test/resources/xlsx_file_xls_extension.xls +0 -0
  90. data/test/standard_mappings_test.rb +0 -22
  91. data/test/table_test.rb +0 -545
  92. data/test/test_helper.rb +0 -35
  93. data/test/universal_importer_helper_test.rb +0 -86
  94. data/test/xml/table_test.rb +0 -90
@@ -1,35 +0,0 @@
1
- require 'simplecov'
2
- SimpleCov.start
3
-
4
- require 'active_support/test_case'
5
- require 'active_support/core_ext/string'
6
- require 'ndr_support/safe_path'
7
- require 'ndr_import'
8
- require 'yaml'
9
-
10
- begin
11
- # Shim for Test::Unit vs. Minitest:
12
- require 'active_support/testing/autorun'
13
- rescue LoadError
14
- # Rails 4+ only
15
- end
16
-
17
- ActiveSupport.test_order = :random if ActiveSupport.respond_to?(:test_order=)
18
-
19
- # The default changes to UTC in Rails 4.
20
- # TODO: ndr_support should cope...
21
- ActiveRecord::Base.default_timezone = :local
22
-
23
- SafePath.configure! File.dirname(__FILE__) + '/resources/filesystem_paths.yml'
24
- NdrImport::StandardMappings.mappings = YAML.load_file(
25
- File.expand_path(File.dirname(__FILE__) + '/resources/standard_mappings.yml')
26
- )
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
-
35
- require 'mocha/minitest'
@@ -1,86 +0,0 @@
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
-
21
- def unzip_path
22
- SafePath.new('test_space_rw')
23
- end
24
- end
25
-
26
- def setup
27
- @permanent_test_files = SafePath.new('permanent_test_files')
28
- @test_importer = TestImporter.new
29
- end
30
-
31
- test 'extract with matching mapping' do
32
- source_file = @permanent_test_files.join('sample_xls.xls')
33
- enumerator_ran = false
34
- @test_importer.extract(source_file) do |table, rows|
35
- assert_instance_of NdrImport::Table, table
36
- assert_instance_of Enumerator, rows
37
- enumerator_ran = true
38
- end
39
- assert enumerator_ran
40
- end
41
-
42
- test 'extract without matching mapping' do
43
- source_file = @permanent_test_files.join('sample_xlsx.xlsx')
44
- enumerator_ran = false
45
- @test_importer.extract(source_file) do |_table, _rows|
46
- enumerator_ran = true
47
- end
48
- refute enumerator_ran
49
- end
50
-
51
- test 'extract and transform with bespoke delimiter' do
52
- table_mappings = [
53
- NdrImport::Table.new(filename_pattern: /\.txt\z/i,
54
- format: 'delimited',
55
- delimiter: '¬',
56
- header_lines: 1,
57
- footer_lines: 0,
58
- klass: 'SomeTestClass',
59
- columns: [{ 'column' => 'one' },
60
- { 'column' => 'two' },
61
- { 'column' => 'three' }])
62
- ]
63
- source_file = @permanent_test_files.join('not_sign_delimited.txt')
64
- @test_importer.stubs(:get_table_mapping).returns(table_mappings.first)
65
- @test_importer.extract(source_file) do |table, rows|
66
- mapped_rows = table.transform(rows)
67
-
68
- assert_instance_of NdrImport::Table, table
69
- assert_instance_of Enumerator, rows
70
- expected_mapped_data = [{ rawtext: { 'one' => 'some', 'two' => 'data', 'three' => 'here' } },
71
- { rawtext: { 'one' => 'more', 'two' => 'data', 'three' => 'here' } }]
72
-
73
- assert_equal expected_mapped_data, (mapped_rows.to_a.map { |_klass, fields| fields })
74
- end
75
- end
76
-
77
- test 'get_notifier' do
78
- class TestImporterWithoutNotifier
79
- include NdrImport::UniversalImporterHelper
80
- end
81
-
82
- assert_raise(NotImplementedError) do
83
- TestImporterWithoutNotifier.new.get_notifier(10_000)
84
- end
85
- end
86
- end
@@ -1,90 +0,0 @@
1
- require 'test_helper'
2
-
3
- # This tests the NdrImport::Xml::Table mapping class
4
- module Xml
5
- class TableTest < ActiveSupport::TestCase
6
- def setup
7
- file_path = SafePath.new('permanent_test_files').join('sample.xml')
8
- handler = NdrImport::File::Xml.new(file_path, nil, 'xml_record_xpath' => 'root/record')
9
-
10
- @element_lines = handler.send(:rows)
11
- end
12
-
13
- def test_should_transform_xml_element_lines
14
- table = NdrImport::Xml::Table.new(klass: 'SomeTestKlass', columns: xml_column_mapping)
15
-
16
- expected_data = ['SomeTestKlass', { rawtext: {
17
- 'no_relative_path' => 'A value',
18
- 'no_relative_path_inner_text' => '',
19
- 'no_path_or_att' => 'Another value',
20
- 'demographics_1' => 'AAA',
21
- 'demographics_2' => '03',
22
- 'demographics_2_inner_text' => 'Inner text',
23
- 'address1' => 'Address',
24
- 'address2' => 'Address 2',
25
- 'pathology_date_1' => '2018-01-01',
26
- 'pathology_date_2' => '',
27
- 'should_be_blank' => ''
28
- } }, 1]
29
-
30
- transformed_data = table.transform(@element_lines)
31
- assert_equal 2, transformed_data.count
32
-
33
- transformed_data.each do |klass, fields, _index|
34
- assert_equal expected_data[0], klass
35
- assert_equal expected_data[1], fields
36
- end
37
- end
38
-
39
- def test_should_fail_with_unmappped_nodes
40
- table = NdrImport::Xml::Table.new(klass: 'SomeTestKlass', columns: partial_xml_column_mapping)
41
-
42
- exception = assert_raises(RuntimeError) { table.transform(@element_lines).to_a }
43
- assert exception.message.starts_with? 'sample.xml [RuntimeError: Unmapped data!'
44
- end
45
-
46
- private
47
-
48
- def xml_column_mapping
49
- [
50
- { 'column' => 'no_relative_path',
51
- 'xml_cell' => { 'relative_path' => '', 'attribute' => 'value' } },
52
- { 'column' => 'no_relative_path', 'rawtext_name' => 'no_relative_path_inner_text',
53
- 'xml_cell' => { 'relative_path' => '' } },
54
- { 'column' => 'no_path_or_att',
55
- 'xml_cell' => { 'relative_path' => '', 'attribute' => '' } },
56
- { 'column' => 'demographics_1',
57
- 'xml_cell' => { 'relative_path' => 'demographics' } },
58
- { 'column' => 'demographics_2',
59
- 'xml_cell' => { 'relative_path' => 'demographics', 'attribute' => 'code' } },
60
- { 'column' => 'demographics_2', 'rawtext_name' => 'demographics_2_inner_text',
61
- 'xml_cell' => { 'relative_path' => 'demographics' } },
62
- { 'column' => 'address_line1[1]', 'rawtext_name' => 'address1',
63
- 'xml_cell' => { 'relative_path' => 'demographics/address' } },
64
- { 'column' => 'address_line1[2]', 'rawtext_name' => 'address2',
65
- 'xml_cell' => { 'relative_path' => 'demographics/address' } },
66
- { 'column' => 'pathology_date_1',
67
- 'xml_cell' => { 'relative_path' => 'pathology' } },
68
- { 'column' => 'pathology_date_2',
69
- 'xml_cell' => { 'relative_path' => 'pathology' } },
70
- { 'column' => 'should_be_blank',
71
- 'xml_cell' => { 'relative_path' => 'not_present' } }
72
- ]
73
- end
74
-
75
- def partial_xml_column_mapping
76
- [
77
- { 'column' => 'no_relative_path',
78
- 'xml_cell' => { 'relative_path' => '', 'attribute' => 'value' } },
79
- { 'column' => 'no_path_or_att',
80
- 'xml_cell' => { 'relative_path' => '', 'attribute' => '' } },
81
- { 'column' => 'demographics_1',
82
- 'xml_cell' => { 'relative_path' => 'demographics' } },
83
- { 'column' => 'demographics_2',
84
- 'xml_cell' => { 'relative_path' => 'demographics', 'attribute' => 'code' } },
85
- { 'column' => 'address_line1',
86
- 'xml_cell' => { 'relative_path' => 'demographics/address' } }
87
- ]
88
- end
89
- end
90
- end