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