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 =
[].freeze
Class Method Summary collapse
- .define_header_method(column_name) ⇒ Object protected
-
.dynamic_column(column_name, options = {}) ⇒ Object
protected
define a dynamic_column, must be after all normal columns.
-
.dynamic_column_names ⇒ Array<Symbol>
Column names for the row model.
-
.dynamic_columns ⇒ Hash
Column names mapped to their options.
-
.dynamic_index(column_name) ⇒ Integer
Index of dynamic_column of all columns.
- .header_method_name(column_name) ⇒ Object
-
.headers(context = {}) ⇒ Object
See Model::Columns::headers.
- .merge_dynamic_columns(column_hash) ⇒ Object protected
- .singular_dynamic_attribute_method_name(column_name) ⇒ Object
Instance Method Summary collapse
-
#attributes ⇒ Object
See Model::Columns#attributes.
Class Method Details
.define_header_method(column_name) ⇒ Object (protected)
68 69 70 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 68 def define_header_method(column_name) define_singleton_method(header_method_name(column_name)) { |header_model| header_model } end |
.dynamic_column(column_name, options = {}) ⇒ Object (protected)
define a dynamic_column, must be after all normal columns
options to be implemented later
59 60 61 62 63 64 65 66 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 59 def dynamic_column(column_name, ={}) extra_keys = .keys - VALID_OPTIONS_KEYS raise ArgumentError.new("invalid options #{extra_keys}") unless extra_keys.empty? define_header_method(column_name) merge_dynamic_columns(column_name.to_sym => ) end |
.dynamic_column_names ⇒ Array<Symbol>
Returns column names for the row model.
28 29 30 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 28 def dynamic_column_names dynamic_columns.keys end |
.dynamic_columns ⇒ Hash
Returns column names mapped to their options.
33 34 35 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 33 def dynamic_columns inherited_class_var(:@_dynamic_columns, {}, :merge) end |
.dynamic_index(column_name) ⇒ Integer
Returns index of dynamic_column of all columns.
22 23 24 25 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 22 def dynamic_index(column_name) offset = dynamic_column_names.index(column_name) offset ? columns.size + offset : nil end |
.header_method_name(column_name) ⇒ Object
37 38 39 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 37 def header_method_name(column_name) "#{column_name.to_s.singularize}_header" end |
.headers(context = {}) ⇒ Object
See Model::Columns::headers
13 14 15 16 17 18 19 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 13 def headers(context={}) @headers ||= super + dynamic_column_names.map do |column_name| OpenStruct.new(context).public_send(column_name).each do |header_model| public_send(header_method_name(column_name), header_model) end end.flatten end |
.merge_dynamic_columns(column_hash) ⇒ Object (protected)
46 47 48 49 50 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 46 def merge_dynamic_columns(column_hash) @_dynamic_columns ||= {} deep_clear_class_cache(:@_dynamic_columns) @_dynamic_columns.merge!(column_hash) end |
.singular_dynamic_attribute_method_name(column_name) ⇒ Object
40 41 42 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 40 def singular_dynamic_attribute_method_name(column_name) column_name.to_s.singularize end |
Instance Method Details
#attributes ⇒ Object
See Model::Columns#attributes
7 8 9 |
# File 'lib/csv_row_model/model/dynamic_columns.rb', line 7 def attributes super.merge(attributes_from_column_names(self.class.dynamic_column_names)) end |