class Topographer::Importer::Mapper::FieldMapping
Attributes
input_columns[R]
output_field[R]
Public Class Methods
new(required, input_columns, output_field, &mapping_behavior)
click to toggle source
# File lib/topographer/importer/mapper/field_mapping.rb, line 10 def initialize(required, input_columns, output_field, &mapping_behavior) @required = required @input_columns = Array(input_columns) @output_field = output_field @mapping_behavior = mapping_behavior @invalid_keys = [] end
Public Instance Methods
process_input(input, result)
click to toggle source
# File lib/topographer/importer/mapper/field_mapping.rb, line 18 def process_input(input, result) mapping_input = input.slice(*input_columns) @invalid_keys = get_invalid_keys(mapping_input) data = (@invalid_keys.any?) ? nil : apply_mapping(mapping_input) if !data.nil? result.add_data(output_field, data) elsif required? result.add_error(output_field, invalid_input_error) end rescue => exception result.add_error(output_field, exception.message) end
required?()
click to toggle source
# File lib/topographer/importer/mapper/field_mapping.rb, line 33 def required? @required end
Private Instance Methods
apply_mapping(mapping_input)
click to toggle source
# File lib/topographer/importer/mapper/field_mapping.rb, line 39 def apply_mapping(mapping_input) if @mapping_behavior @mapping_behavior.(mapping_input) else (mapping_input.size > 1) ? mapping_input.values.join(', ') : mapping_input.values.first end end
get_invalid_keys(input)
click to toggle source
# File lib/topographer/importer/mapper/field_mapping.rb, line 51 def get_invalid_keys(input) missing_columns = @input_columns - input.keys #reject input that is not blank or the value `false` #this allows boolean inputs for required fields missing_data = @required ? input.reject { |k, v| !v.blank? || v == false }.keys : [] missing_columns + missing_data end
invalid_input_error()
click to toggle source
# File lib/topographer/importer/mapper/field_mapping.rb, line 47 def invalid_input_error "Missing required input(s): `#{@invalid_keys.join(", ")}` for `#{@output_field}`" end