module CsvRowModel::Model::DynamicColumns

Constants

VALID_OPTIONS_KEYS

Public Instance Methods

attributes() click to toggle source

See Model::Columns#attributes

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