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
-
.define_dynamic_attribute_method(column_name) ⇒ Object
protected
Define default attribute method for a column.
-
.dynamic_column(column_name, options = {}) ⇒ Object
protected
See Model#dynamic_column.
-
.dynamic_source_headers(source_header) ⇒ Array
Dynamic_column headers.
-
.format_dynamic_column_cells(cells, column_name) ⇒ Object
Safe to override.
Instance Method Summary collapse
-
#dynamic_source_headers ⇒ Array
Dynamic_column headers.
-
#dynamic_source_row ⇒ Array
Dynamic_column row data.
-
#original_attribute(column_name) ⇒ Object
The column's attribute before override.
-
#original_attributes ⇒ Hash
A map of
column_name => original_attribute(column_name).
Class Method Details
.define_dynamic_attribute_method(column_name) ⇒ Object (protected)
Define default attribute method for a column
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, ={}) super define_dynamic_attribute_method(column_name) end |
.dynamic_source_headers(source_header) ⇒ Array
Returns 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
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_headers ⇒ Array
Returns 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_row ⇒ Array
Returns 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.
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_attributes ⇒ Hash
Returns 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 |