ndr_import 4.1.2 → 4.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|