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
-
.dynamic_column(column_name, options = {}) ⇒ Object
protected
define a dynamic_column, must be after all normal columns.
- .dynamic_column_headers(context = {}) ⇒ Object
-
.dynamic_column_names ⇒ Array<Symbol>
Column names for the row model.
- .dynamic_column_options(column_name) ⇒ Object
- .dynamic_columns? ⇒ Boolean
-
.dynamic_index(column_name) ⇒ Integer
Index of dynamic_column of all columns.
-
.headers(context = {}) ⇒ Object
See Model::Columns::headers.
- .is_dynamic_column?(column_name) ⇒ Boolean
- .singular_dynamic_attribute_method_name(column_name) ⇒ Object
Instance Method Summary collapse
-
#attributes ⇒ Object
See Model::Columns#attributes.
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
65 66 67 68 69 70 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 65 def dynamic_column(column_name, ={}) extra_keys = .keys - VALID_OPTIONS_KEYS raise ArgumentError.new("invalid options #{extra_keys}") unless extra_keys.empty? merge_dynamic_columns(column_name.to_sym => ) end |
.dynamic_column_headers(context = {}) ⇒ Object
28 29 30 31 32 33 34 35 |
# 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 = (column_name)[:header] || ->(header_model) { header_model } instance_exec(header_model, &header_proc) end end.flatten end |
.dynamic_column_names ⇒ Array<Symbol>
Returns column names for the row model.
48 49 50 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 48 def dynamic_column_names dynamic_columns.keys end |
.dynamic_column_options(column_name) ⇒ Object
43 44 45 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 43 def (column_name) dynamic_columns[column_name] end |
.dynamic_columns? ⇒ Boolean
15 16 17 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 15 def dynamic_columns? dynamic_columns.present? end |
.dynamic_index(column_name) ⇒ Integer
Returns index of dynamic_column of all columns.
38 39 40 41 |
# 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 = {}) ⇒ Object
See Model::Columns::headers
24 25 26 |
# 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) ⇒ Boolean
19 20 21 |
# 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) ⇒ Object
52 53 54 |
# 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 |
Instance Method Details
#attributes ⇒ Object
See Model::Columns#attributes
10 11 12 |
# 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 |