ndr_import 4.1.2 → 4.1.3
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 +4 -4
- data/code_safety.yml +5 -5
- data/lib/ndr_import/mapper.rb +62 -39
- data/lib/ndr_import/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9a249e271f414563cc3f5c345788d975c53345b
|
4
|
+
data.tar.gz: 2db4b6bdf135d441cc80be272d3ced1334a38b23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 524323ff88ea70f8fe2c87c9d89c29483c73ac772e89c236ecd514afdc760b16527c0f42183664553b9770bb53c3be04679817346dcf77f27d4b3781676025a9
|
7
|
+
data.tar.gz: d455318ed9c99561166db9ee12170b94e48e0d89dd9f955622f0cf687d87df4c921c13a41247625a7670ff71024864ba651747e2311e8e0246f11b93076dc44c
|
data/code_safety.yml
CHANGED
@@ -126,8 +126,8 @@ file safety:
|
|
126
126
|
safe_revision: 6c6f204fab2f4232d81cb76aa523c26b0c490ae7
|
127
127
|
lib/ndr_import/mapper.rb:
|
128
128
|
comments:
|
129
|
-
reviewed_by:
|
130
|
-
safe_revision:
|
129
|
+
reviewed_by: brian.shand
|
130
|
+
safe_revision: ef4c15a443efa3e2de660e704f7d96e77cff1a93
|
131
131
|
lib/ndr_import/mapping_error.rb:
|
132
132
|
comments:
|
133
133
|
reviewed_by: timgentry
|
@@ -169,9 +169,9 @@ file safety:
|
|
169
169
|
reviewed_by: josh.pencheon
|
170
170
|
safe_revision: 36143ff4f48e0433a7b04b63143ef6d6d2481fec
|
171
171
|
lib/ndr_import/version.rb:
|
172
|
-
comments:
|
173
|
-
reviewed_by:
|
174
|
-
safe_revision:
|
172
|
+
comments:
|
173
|
+
reviewed_by: timgentry
|
174
|
+
safe_revision: 39c9976eb8ae83c6808956ab30a7b74669232612
|
175
175
|
ndr_import.gemspec:
|
176
176
|
comments:
|
177
177
|
reviewed_by: josh.pencheon
|
data/lib/ndr_import/mapper.rb
CHANGED
@@ -6,20 +6,43 @@ require 'msworddoc-extractor'
|
|
6
6
|
|
7
7
|
# This module provides helper logic for mapping unified sources for import into the system
|
8
8
|
module NdrImport::Mapper
|
9
|
+
# The mapper runs nested loops that can result in the allocation of millions
|
10
|
+
# of short-lived objects. By pre-allocating these known keys, we can reduce GC pressure.
|
11
|
+
module Strings
|
12
|
+
CLEAN = 'clean'.freeze
|
13
|
+
COLUMN = 'column'.freeze
|
14
|
+
COMPACT = 'compact'.freeze
|
15
|
+
DAYSAFTER = 'daysafter'.freeze
|
16
|
+
DECODE = 'decode'.freeze
|
17
|
+
DO_NOT_CAPTURE = 'do_not_capture'.freeze
|
18
|
+
FIELD = 'field'.freeze
|
19
|
+
FORMAT = 'format'.freeze
|
20
|
+
JOIN = 'join'.freeze
|
21
|
+
MAP = 'map'.freeze
|
22
|
+
MAPPINGS = 'mappings'.freeze
|
23
|
+
MATCH = 'match'.freeze
|
24
|
+
ORDER = 'order'.freeze
|
25
|
+
PRIORITY = 'priority'.freeze
|
26
|
+
RAWTEXT_NAME = 'rawtext_name'.freeze
|
27
|
+
REPLACE = 'replace'.freeze
|
28
|
+
STANDARD_MAPPING = 'standard_mapping'.freeze
|
29
|
+
UNPACK_PATTERN = 'unpack_pattern'.freeze
|
30
|
+
end
|
31
|
+
|
9
32
|
private
|
10
33
|
|
11
34
|
# uses the mappings for this line to unpack the fixed width string
|
12
35
|
# returning an array of the resulting columns
|
13
36
|
def fixed_width_columns(line, line_mappings)
|
14
|
-
unpack_patterns = line_mappings.map { |c| c[
|
37
|
+
unpack_patterns = line_mappings.map { |c| c[Strings::UNPACK_PATTERN] }.join
|
15
38
|
line.unpack(unpack_patterns)
|
16
39
|
end
|
17
40
|
|
18
41
|
# the replace option can be used before any other mapping option
|
19
42
|
def replace_before_mapping(original_value, field_mapping)
|
20
|
-
return unless original_value && field_mapping.include?(
|
43
|
+
return unless original_value && field_mapping.include?(Strings::REPLACE)
|
21
44
|
|
22
|
-
replaces = field_mapping[
|
45
|
+
replaces = field_mapping[Strings::REPLACE]
|
23
46
|
|
24
47
|
if replaces.is_a?(Array)
|
25
48
|
replaces.each { |repls| apply_replaces(original_value, repls) }
|
@@ -43,7 +66,7 @@ module NdrImport::Mapper
|
|
43
66
|
return unless standard_mapping
|
44
67
|
|
45
68
|
column_mapping.each_with_object(standard_mapping.dup) do |(key, value), result|
|
46
|
-
if
|
69
|
+
if Strings::MAPPINGS == key
|
47
70
|
# Column mapping appends mappings to the standard mapping...
|
48
71
|
result[key] += value
|
49
72
|
else
|
@@ -69,17 +92,17 @@ module NdrImport::Mapper
|
|
69
92
|
"Line has too many columns (expected #{line_mappings.size} but got #{line.size})"
|
70
93
|
end
|
71
94
|
|
72
|
-
next if column_mapping[
|
95
|
+
next if column_mapping[Strings::DO_NOT_CAPTURE]
|
73
96
|
|
74
|
-
if column_mapping[
|
75
|
-
column_mapping = standard_mapping(column_mapping[
|
97
|
+
if column_mapping[Strings::STANDARD_MAPPING]
|
98
|
+
column_mapping = standard_mapping(column_mapping[Strings::STANDARD_MAPPING], column_mapping)
|
76
99
|
end
|
77
100
|
|
78
101
|
# Establish the rawtext column name we are to use for this column
|
79
|
-
rawtext_column_name = (column_mapping[
|
102
|
+
rawtext_column_name = (column_mapping[Strings::RAWTEXT_NAME] || column_mapping[Strings::COLUMN]).downcase
|
80
103
|
|
81
104
|
# Replace raw_value with decoded raw_value
|
82
|
-
Array(column_mapping[
|
105
|
+
Array(column_mapping[Strings::DECODE]).each do |encoding|
|
83
106
|
raw_value = decode_raw_value(raw_value, encoding)
|
84
107
|
end
|
85
108
|
|
@@ -91,8 +114,8 @@ module NdrImport::Mapper
|
|
91
114
|
# Store the raw column value
|
92
115
|
rawtext[rawtext_column_name] = raw_value
|
93
116
|
|
94
|
-
next unless column_mapping.key?(
|
95
|
-
column_mapping[
|
117
|
+
next unless column_mapping.key?(Strings::MAPPINGS)
|
118
|
+
column_mapping[Strings::MAPPINGS].each do |field_mapping|
|
96
119
|
# create a duplicate of the raw value we can manipulate
|
97
120
|
original_value = raw_value ? raw_value.dup : nil
|
98
121
|
|
@@ -101,21 +124,21 @@ module NdrImport::Mapper
|
|
101
124
|
|
102
125
|
# We don't care about blank values, unless we're mapping a :join
|
103
126
|
# field (in which case, :compact may or may not be being used).
|
104
|
-
next if value.blank? && !field_mapping[
|
127
|
+
next if value.blank? && !field_mapping[Strings::JOIN]
|
105
128
|
|
106
|
-
field = field_mapping[
|
129
|
+
field = field_mapping[Strings::FIELD]
|
107
130
|
|
108
131
|
data[field] ||= {}
|
109
132
|
data[field][:values] ||= [] # "better" values come earlier
|
110
133
|
data[field][:compact] = true unless data[field].key?(:compact)
|
111
134
|
|
112
|
-
if field_mapping[
|
113
|
-
data[field][:join] ||= field_mapping[
|
114
|
-
data[field][:compact] = field_mapping[
|
135
|
+
if field_mapping[Strings::ORDER]
|
136
|
+
data[field][:join] ||= field_mapping[Strings::JOIN]
|
137
|
+
data[field][:compact] = field_mapping[Strings::COMPACT] if field_mapping.key?(Strings::COMPACT)
|
115
138
|
|
116
|
-
data[field][:values][field_mapping[
|
117
|
-
elsif field_mapping[
|
118
|
-
data[field][:values][field_mapping[
|
139
|
+
data[field][:values][field_mapping[Strings::ORDER] - 1] = value
|
140
|
+
elsif field_mapping[Strings::PRIORITY]
|
141
|
+
data[field][:values][field_mapping[Strings::PRIORITY]] = value
|
119
142
|
else
|
120
143
|
data[field][:values].unshift(value) # new "best" value
|
121
144
|
end
|
@@ -145,26 +168,26 @@ module NdrImport::Mapper
|
|
145
168
|
end
|
146
169
|
|
147
170
|
def mapped_value(original_value, field_mapping)
|
148
|
-
if field_mapping.include?(
|
171
|
+
if field_mapping.include?(Strings::FORMAT)
|
149
172
|
begin
|
150
|
-
return original_value.blank? ? nil : original_value.to_date(field_mapping[
|
173
|
+
return original_value.blank? ? nil : original_value.to_date(field_mapping[Strings::FORMAT])
|
151
174
|
rescue ArgumentError => e
|
152
175
|
e2 = ArgumentError.new("#{e} value #{original_value.inspect}")
|
153
176
|
e2.set_backtrace(e.backtrace)
|
154
177
|
raise e2
|
155
178
|
end
|
156
|
-
elsif field_mapping.include?(
|
157
|
-
return original_value.blank? ? nil : original_value.clean(field_mapping[
|
158
|
-
elsif field_mapping.include?(
|
159
|
-
return field_mapping[
|
160
|
-
elsif field_mapping.include?(
|
161
|
-
# WARNING:TVB Thu Aug 9 17:09:25 BST 2012 field_mapping[
|
179
|
+
elsif field_mapping.include?(Strings::CLEAN)
|
180
|
+
return original_value.blank? ? nil : original_value.clean(field_mapping[Strings::CLEAN])
|
181
|
+
elsif field_mapping.include?(Strings::MAP)
|
182
|
+
return field_mapping[Strings::MAP] ? field_mapping[Strings::MAP][original_value] : nil
|
183
|
+
elsif field_mapping.include?(Strings::MATCH)
|
184
|
+
# WARNING:TVB Thu Aug 9 17:09:25 BST 2012 field_mapping[Strings::MATCH] regexp
|
162
185
|
# may need to be escaped
|
163
|
-
matches = Regexp.new(field_mapping[
|
186
|
+
matches = Regexp.new(field_mapping[Strings::MATCH]).match(original_value)
|
164
187
|
return matches[1].strip if matches && matches.size > 0
|
165
|
-
elsif field_mapping.include?(
|
188
|
+
elsif field_mapping.include?(Strings::DAYSAFTER)
|
166
189
|
return original_value unless original_value.to_i.to_s == original_value.to_s
|
167
|
-
return original_value.to_i.days.since(field_mapping[
|
190
|
+
return original_value.to_i.days.since(field_mapping[Strings::DAYSAFTER].to_time).to_date
|
168
191
|
else
|
169
192
|
return nil if original_value.blank?
|
170
193
|
return original_value.is_a?(String) ? original_value.strip : original_value
|
@@ -175,18 +198,18 @@ module NdrImport::Mapper
|
|
175
198
|
def validate_line_mappings(line_mappings)
|
176
199
|
priority = {}
|
177
200
|
line_mappings.each do |column_mapping|
|
178
|
-
if column_mapping[
|
179
|
-
if standard_mapping(column_mapping[
|
180
|
-
fail "Standard mapping \"#{column_mapping[
|
201
|
+
if column_mapping[Strings::STANDARD_MAPPING]
|
202
|
+
if standard_mapping(column_mapping[Strings::STANDARD_MAPPING], column_mapping).nil?
|
203
|
+
fail "Standard mapping \"#{column_mapping[Strings::STANDARD_MAPPING]}\" does not exist"
|
181
204
|
end
|
182
205
|
end
|
183
206
|
|
184
|
-
next unless column_mapping.key?(
|
185
|
-
column_mapping[
|
186
|
-
field = field_mapping[
|
187
|
-
if field_mapping[
|
188
|
-
fail 'Cannot have duplicate priorities' if priority[field] == field_mapping[
|
189
|
-
priority[field] = field_mapping[
|
207
|
+
next unless column_mapping.key?(Strings::MAPPINGS)
|
208
|
+
column_mapping[Strings::MAPPINGS].each do |field_mapping|
|
209
|
+
field = field_mapping[Strings::FIELD]
|
210
|
+
if field_mapping[Strings::PRIORITY]
|
211
|
+
fail 'Cannot have duplicate priorities' if priority[field] == field_mapping[Strings::PRIORITY]
|
212
|
+
priority[field] = field_mapping[Strings::PRIORITY]
|
190
213
|
else
|
191
214
|
priority[field] = 1
|
192
215
|
end
|
data/lib/ndr_import/version.rb
CHANGED
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.1.
|
4
|
+
version: 4.1.3
|
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: 2017-
|
11
|
+
date: 2017-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -430,7 +430,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
430
430
|
version: '0'
|
431
431
|
requirements: []
|
432
432
|
rubyforge_project:
|
433
|
-
rubygems_version: 2.5.
|
433
|
+
rubygems_version: 2.5.1
|
434
434
|
signing_key:
|
435
435
|
specification_version: 4
|
436
436
|
summary: NDR Import
|