Module: CsvRowModel::Model::DynamicColumns

Extended by:
ActiveSupport::Concern
Included in:
CsvRowModel::Model
Defined in:
lib/csv_row_model/model/dynamic_columns.rb

Constant Summary collapse

VALID_OPTIONS_KEYS =
i[header].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.dynamic_column(column_name, options = {}) ⇒ Object (protected)

define a dynamic_column, must be after all normal columns

options to be implemented later

Parameters:

  • column_name

Raises:



62
63
64
65
66
67
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 62

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 = {}) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 25

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_namesArray<Symbol>

Returns column names for the row model.

Returns:

  • column names for the row model



45
46
47
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 45

def dynamic_column_names
  dynamic_columns.keys
end

.dynamic_column_options(column_name) ⇒ Object



40
41
42
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 40

def dynamic_column_options(column_name)
  dynamic_columns[column_name]
end

.dynamic_index(column_name) ⇒ Integer

Returns index of dynamic_column of all columns.

Returns:

  • index of dynamic_column of all columns



35
36
37
38
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 35

def dynamic_index(column_name)
  offset = dynamic_column_names.index(column_name)
  offset ? columns.size + offset : nil
end

.headers(context = {}) ⇒ Object

See Model::Columns::headers



21
22
23
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 21

def headers(context={})
  super + dynamic_column_headers(context)
end

.is_dynamic_column?(column_name) ⇒ Boolean

Returns:



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

def is_dynamic_column?(column_name)
  dynamic_columns.keys.include?(column_name)
end

.singular_dynamic_attribute_method_name(column_name) ⇒ Object



49
50
51
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 49

def singular_dynamic_attribute_method_name(column_name)
  column_name.to_s.singularize
end

Instance Method Details

#attributesObject

See Model::Columns#attributes



11
12
13
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 11

def attributes
  super.merge(attributes_from_column_names(self.class.dynamic_column_names))
end