Module: CsvRowModel::Import::DynamicColumns

Extended by:
ActiveSupport::Concern
Included in:
CsvRowModel::Import
Defined in:
lib/csv_row_model/import/dynamic_columns.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.define_dynamic_attribute_method(column_name) ⇒ Object (protected)

Define default attribute method for a column

Parameters:

  • column_name (Symbol)

    the cell's column_name



69
70
71
72
# 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 = {}) ⇒ Object (protected)

See Model#dynamic_column



62
63
64
65
# 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(source_header) ⇒ Array

Returns dynamic_column headers.

Returns:

  • (Array)

    dynamic_column headers



55
56
57
# File 'lib/csv_row_model/import/dynamic_columns.rb', line 55

def dynamic_source_headers(source_header)
  source_header[columns.size..-1]
end

.format_dynamic_column_cells(cells, column_name) ⇒ Object

Safe to override. Method applied to each dynamic_column attribute

Parameters:

  • cells (Array)

    Array of values

  • column_name (Symbol)

    Dynamic column name



51
52
53
# File 'lib/csv_row_model/import/dynamic_columns.rb', line 51

def format_dynamic_column_cells(cells, column_name)
  cells
end

Instance Method Details

#dynamic_source_headersArray

Returns dynamic_column headers.

Returns:

  • (Array)

    dynamic_column headers



11
12
13
# 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_rowArray

Returns dynamic_column row data.

Returns:

  • (Array)

    dynamic_column row data



16
17
18
# File 'lib/csv_row_model/import/dynamic_columns.rb', line 16

def dynamic_source_row
  source_row[self.class.columns.size..-1]
end

#original_attribute(column_name) ⇒ Object

Returns the column's attribute before override.

Returns:

  • (Object)

    the column's attribute before override



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 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_attributesHash

Returns a map of column_name => original_attribute(column_name).

Returns:

  • (Hash)

    a map of column_name => original_attribute(column_name)



21
22
23
24
25
# 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