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