module CsvRowModel::Import::DynamicColumns

Public Instance Methods

define_dynamic_attribute_method(column_name) click to toggle source

Define default attribute method for a column @param column_name [Symbol] the cell’s column_name

# File lib/csv_row_model/import/dynamic_columns.rb, line 69
def define_dynamic_attribute_method(column_name)
  define_method(column_name) { original_attribute(column_name) }
  define_method(singular_dynamic_attribute_method_name(column_name)) { |value, source_header| value }
end
dynamic_column(column_name, options={}) click to toggle source

See {Model#dynamic_column}

Calls superclass method
# File lib/csv_row_model/import/dynamic_columns.rb, line 62
def dynamic_column(column_name, options={})
  super
  define_dynamic_attribute_method(column_name)
end
dynamic_source_headers() click to toggle source

@return [Array] dynamic_column headers

# File lib/csv_row_model/import/dynamic_columns.rb, line 11
def dynamic_source_headers
  self.class.dynamic_source_headers source_header
end
dynamic_source_row() click to toggle source

@return [Array] dynamic_column row data

# File lib/csv_row_model/import/dynamic_columns.rb, line 16
def dynamic_source_row
  self.class.dynamic_columns? ? source_row[self.class.columns.size..-1] : []
end
format_dynamic_column_cells(cells, column_name) click to toggle source

Safe to override. Method applied to each dynamic_column attribute

@param cells [Array] Array of values @param column_name [Symbol] Dynamic column name

# File lib/csv_row_model/import/dynamic_columns.rb, line 51
def format_dynamic_column_cells(cells, column_name)
  cells
end
original_attribute(column_name) click to toggle source

@return [Object] the column’s attribute before override

Calls superclass method
# File lib/csv_row_model/import/dynamic_columns.rb, line 28
def original_attribute(column_name)
  return super if self.class.column_names.include? column_name
  return unless self.class.dynamic_column_names.include? column_name
  return @original_attributes[column_name] if original_attribute_memoized? column_name

  values = dynamic_source_headers.map.with_index do |source_header, index|
    value = self.class.format_cell(
      dynamic_source_row[index],
      source_header,
      self.class.dynamic_index(column_name),
      context
    )
    public_send(self.class.singular_dynamic_attribute_method_name(column_name), value, source_header)
  end

  @original_attributes[column_name] = self.class.format_dynamic_column_cells(values, column_name)
end
original_attributes() click to toggle source

@return [Hash] a map of ‘column_name => original_attribute(column_name)`

Calls superclass method
# File lib/csv_row_model/import/dynamic_columns.rb, line 21
def original_attributes
  super
  self.class.dynamic_column_names.each { |column_name| original_attribute(column_name) }
  @original_attributes
end