module CsvRowModel::Model::DynamicColumns
Constants
- VALID_OPTIONS_KEYS
Public Instance Methods
attributes()
click to toggle source
Calls superclass method
# File lib/csv_row_model/model/dynamic_columns.rb, line 10 def attributes super.merge(attributes_from_column_names(self.class.dynamic_column_names)) end
dynamic_column(column_name, options={})
click to toggle source
define a dynamic_column
, must be after all normal columns
options to be implemented later
@param column_name [Symbol] column_name
# File lib/csv_row_model/model/dynamic_columns.rb, line 65 def dynamic_column(column_name, options={}) extra_keys = options.keys - VALID_OPTIONS_KEYS raise ArgumentError.new("invalid options #{extra_keys}") unless extra_keys.empty? merge_dynamic_columns(column_name.to_sym => options) end
dynamic_column_headers(context={})
click to toggle source
# File lib/csv_row_model/model/dynamic_columns.rb, line 28 def dynamic_column_headers(context={}) dynamic_column_names.map do |column_name| Array(OpenStruct.new(context).public_send(column_name)).each do |header_model| header_proc = dynamic_column_options(column_name)[:header] || ->(header_model) { header_model } instance_exec(header_model, &header_proc) end end.flatten end
dynamic_column_names()
click to toggle source
@return [Array<Symbol>] column names for the row model
# File lib/csv_row_model/model/dynamic_columns.rb, line 48 def dynamic_column_names dynamic_columns.keys end
dynamic_column_options(column_name)
click to toggle source
# File lib/csv_row_model/model/dynamic_columns.rb, line 43 def dynamic_column_options(column_name) dynamic_columns[column_name] end
dynamic_columns?()
click to toggle source
# File lib/csv_row_model/model/dynamic_columns.rb, line 15 def dynamic_columns? dynamic_columns.present? end
dynamic_index(column_name)
click to toggle source
@return [Integer] index of dynamic_column
of all columns
# File lib/csv_row_model/model/dynamic_columns.rb, line 38 def dynamic_index(column_name) offset = dynamic_column_names.index(column_name) offset ? columns.size + offset : nil end
headers(context={})
click to toggle source
See Model::Columns::headers
Calls superclass method
# File lib/csv_row_model/model/dynamic_columns.rb, line 24 def headers(context={}) super + dynamic_column_headers(context) end
is_dynamic_column?(column_name)
click to toggle source
# File lib/csv_row_model/model/dynamic_columns.rb, line 19 def is_dynamic_column?(column_name) dynamic_columns.keys.include?(column_name) end
singular_dynamic_attribute_method_name(column_name)
click to toggle source
# File lib/csv_row_model/model/dynamic_columns.rb, line 52 def singular_dynamic_attribute_method_name(column_name) column_name.to_s.singularize end