class Topographer::Importer::Mapper

Attributes

bad_columns[R]
default_values[R]
ignored_mappings[R]
key_fields[R]
missing_columns[R]
model_class[R]
optional_mappings[R]
required_mappings[R]
validation_mappings[R]

Public Class Methods

build_mapper(model_class) { |mapper_builder| ... } click to toggle source
# File lib/topographer/importer/mapper.rb, line 19
def self.build_mapper(model_class)
  mapper_builder = MapperBuilder.new()
  yield mapper_builder

  new(mapper_builder, model_class)
end
new(mapper_builder, model_class) click to toggle source
# File lib/topographer/importer/mapper.rb, line 26
def initialize(mapper_builder, model_class)
  @required_mappings = mapper_builder.required_mappings
  @optional_mappings = mapper_builder.optional_mappings
  @ignored_mappings = mapper_builder.ignored_mappings
  @validation_mappings = mapper_builder.validation_mappings
  @default_values = mapper_builder.default_values
  @key_fields = mapper_builder.key_fields
  @field_mappings = mapper_builder.field_mappings
  @model_class = model_class
end

Public Instance Methods

input_structure_valid?(input_columns, options={}) click to toggle source
# File lib/topographer/importer/mapper.rb, line 37
def input_structure_valid?(input_columns, options={})
  ignore_unmapped_columns = options.fetch(:ignore_unmapped_columns, false)
  @bad_columns ||= input_columns - mapped_input_columns
  @missing_columns ||= required_input_columns - input_columns

  if ignore_unmapped_columns
    @missing_columns.empty?
  else
    @bad_columns.empty? && @missing_columns.empty?
  end
end
map_input(source_data) click to toggle source
# File lib/topographer/importer/mapper.rb, line 49
def map_input(source_data)
  mapping_result = Result.new(source_data.source_identifier)

  if source_data.empty?
    handle_no_data(mapping_result)
  else
    mappings.each do |_output_field, field_mapping|
      field_mapping.process_input(source_data.data, mapping_result)
    end
  end

  mapping_result
end

Private Instance Methods

handle_no_data(mapping_result) click to toggle source
# File lib/topographer/importer/mapper.rb, line 64
def handle_no_data(mapping_result)
  mapping_result.add_error('EmptyRow', 'Unable to import empty row.')
end