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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48a0ef9610f39b40881de9c2cbd4d79ac2fe197e
4
- data.tar.gz: 69303c1297dcb5db806b996e95afad84fd31cae4
3
+ metadata.gz: e9a249e271f414563cc3f5c345788d975c53345b
4
+ data.tar.gz: 2db4b6bdf135d441cc80be272d3ced1334a38b23
5
5
  SHA512:
6
- metadata.gz: 877ff4160d5eeb02f372cae707118fffad4e8b0b702435753cdd06095b11097ac41a5a2010827936449d1f7656df9fbb62196cc7dc756be16a57f8a1e94c92f3
7
- data.tar.gz: d330674f04f8bbd6cc50197ed48d75943182209ed2d20721b95bedb3fadc93d9105572d2c76f5ce9d595d1f8c2ed64276905244067f107b1bc0216c69b81131a
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: josh.pencheon
130
- safe_revision: fc27767d88956ef8e1182d6c1a6335266d34f7c5
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: another check?
173
- reviewed_by: josh.pencheon
174
- safe_revision: 5b8e738929c12ccf800a2729d567fdf57a1bc159
172
+ comments:
173
+ reviewed_by: timgentry
174
+ safe_revision: 39c9976eb8ae83c6808956ab30a7b74669232612
175
175
  ndr_import.gemspec:
176
176
  comments:
177
177
  reviewed_by: josh.pencheon
@@ -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['unpack_pattern'] }.join
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?('replace')
43
+ return unless original_value && field_mapping.include?(Strings::REPLACE)
21
44
 
22
- replaces = field_mapping['replace']
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 'mappings' == key
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['do_not_capture']
95
+ next if column_mapping[Strings::DO_NOT_CAPTURE]
73
96
 
74
- if column_mapping['standard_mapping']
75
- column_mapping = standard_mapping(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['rawtext_name'] || column_mapping['column']).downcase
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['decode']).each do |encoding|
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?('mappings')
95
- column_mapping['mappings'].each do |field_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['join']
127
+ next if value.blank? && !field_mapping[Strings::JOIN]
105
128
 
106
- field = field_mapping['field']
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['order']
113
- data[field][:join] ||= field_mapping['join']
114
- data[field][:compact] = field_mapping['compact'] if field_mapping.key?('compact')
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['order'] - 1] = value
117
- elsif field_mapping['priority']
118
- data[field][:values][field_mapping['priority']] = value
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?('format')
171
+ if field_mapping.include?(Strings::FORMAT)
149
172
  begin
150
- return original_value.blank? ? nil : original_value.to_date(field_mapping['format'])
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?('clean')
157
- return original_value.blank? ? nil : original_value.clean(field_mapping['clean'])
158
- elsif field_mapping.include?('map')
159
- return field_mapping['map'] ? field_mapping['map'][original_value] : nil
160
- elsif field_mapping.include?('match')
161
- # WARNING:TVB Thu Aug 9 17:09:25 BST 2012 field_mapping['match'] regexp
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['match']).match(original_value)
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?('daysafter')
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['daysafter'].to_time).to_date
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['standard_mapping']
179
- if standard_mapping(column_mapping['standard_mapping'], column_mapping).nil?
180
- fail "Standard mapping \"#{column_mapping['standard_mapping']}\" does not exist"
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?('mappings')
185
- column_mapping['mappings'].each do |field_mapping|
186
- field = field_mapping['field']
187
- if field_mapping['priority']
188
- fail 'Cannot have duplicate priorities' if priority[field] == field_mapping['priority']
189
- priority[field] = field_mapping['priority']
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
@@ -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 = '4.1.2'.freeze
4
+ VERSION = '4.1.3'.freeze
5
5
  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: 4.1.2
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-03-08 00:00:00.000000000 Z
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.2
433
+ rubygems_version: 2.5.1
434
434
  signing_key:
435
435
  specification_version: 4
436
436
  summary: NDR Import