module LpCSVExportable::CanExportAsCSV
Attributes
collection[RW]
column_class[RW]
Public Class Methods
included(base)
click to toggle source
# File lib/lp_csv_exportable/can_export_as_csv.rb, line 5 def self.included(base) base.extend ClassMethods end
Public Instance Methods
to_csv()
click to toggle source
# File lib/lp_csv_exportable/can_export_as_csv.rb, line 9 def to_csv CSV.generate do |csv| csv << headers data_matrix.each do |row| csv << row end end end
Private Instance Methods
call_model_method(model_method, memo)
click to toggle source
# File lib/lp_csv_exportable/can_export_as_csv.rb, line 54 def call_model_method(model_method, memo) if respond_to?(model_method) send(model_method, memo) else memo.try(model_method) end end
columns()
click to toggle source
# File lib/lp_csv_exportable/can_export_as_csv.rb, line 24 def columns self.class.columns_hashes.map do |hash| column_class.new(hash) end end
data_matrix()
click to toggle source
# File lib/lp_csv_exportable/can_export_as_csv.rb, line 34 def data_matrix # array of arrays # i.e. rows 2+ of CSV collection.map do |obj| columns.map do |column| column.format(retrieve_value(obj, column)) end end end
headers()
click to toggle source
# File lib/lp_csv_exportable/can_export_as_csv.rb, line 30 def headers columns.map { |c| c.header.try(:to_s) } end
retrieve_value(obj, column)
click to toggle source
# File lib/lp_csv_exportable/can_export_as_csv.rb, line 44 def retrieve_value(obj, column) # only one method to retrieve value return call_model_method(column.model_method, obj) if column.model_method.present? # chain methods to retrieve value (jsonb store) # i.e. employee.market_data.min column.model_methods.inject(obj) do |memo, model_method| call_model_method(model_method, memo) end end