class Collection2csv::Convertor
Public Class Methods
new(params)
click to toggle source
# File lib/collection2csv/convertor.rb, line 4 def initialize(params) @klass = params[:klass].constantize @column_names_from_params = params[:column_names].presence @associations_from_params = params[:associations].presence @column_names = @column_names_from_params || @klass.column_names @associations = @associations_from_params || {} @association_class_names = {} @association_column_names = [] @primary_ids = params[:ids] end
Public Instance Methods
perform()
click to toggle source
# File lib/collection2csv/convertor.rb, line 15 def perform validate download end
Private Instance Methods
association_column_names()
click to toggle source
# File lib/collection2csv/convertor.rb, line 77 def association_column_names @associations.each do | association_key, association_value | association_value.each { |column_name| @association_column_names << "#{association_key}_#{column_name}" } end @association_column_names.map(&:camelize) end
construct_error_msg(false_entities,pluralizer)
click to toggle source
# File lib/collection2csv/convertor.rb, line 43 def construct_error_msg(false_entities,pluralizer) false_entities.join(', ') + ' ' + pluralizer.pluralize(false_entities.count) + ' not found' end
download()
click to toggle source
# File lib/collection2csv/convertor.rb, line 27 def download @collections = @klass.includes(@associations.try(:keys)).find(@primary_ids) to_csv(@collections,@column_names,@associations) end
generate_column_data(collection)
click to toggle source
# File lib/collection2csv/convertor.rb, line 84 def generate_column_data(collection) data = collection.attributes.values_at(*@column_names) data = @associations.empty? ? data : generate_column_data_for_association(collection, data) end
generate_column_data_for_association(collection, data)
click to toggle source
# File lib/collection2csv/convertor.rb, line 89 def generate_column_data_for_association(collection, data) @associations.each do |association_key , association_value | obj = collection.public_send(association_key) data += obj.present? ? obj.attributes.values_at(*association_value) : Array.new(association_value.count,"") end data end
generate_header()
click to toggle source
# File lib/collection2csv/convertor.rb, line 72 def generate_header @header = @column_names.map(&:camelize) @header += association_column_names end
get_association_class_names()
click to toggle source
# File lib/collection2csv/convertor.rb, line 59 def get_association_class_names @klass.reflect_on_all_associations.each do |association| @association_class_names["#{association.name}"] = association.options[:class_name].presence || association.name.to_s.camelize end end
raise_error(false_entities, pluralizer, source = nil)
click to toggle source
# File lib/collection2csv/convertor.rb, line 37 def raise_error(false_entities, pluralizer, source = nil) msg = construct_error_msg(false_entities, pluralizer) msg << ' in ' if source.present? raise msg + source end
to_csv(collections,column_names,associations)
click to toggle source
# File lib/collection2csv/convertor.rb, line 97 def to_csv(collections,column_names,associations) CSV.generate do |csv| csv << generate_header @collections.each { |collection| csv << generate_column_data(collection) } end end
validate()
click to toggle source
# File lib/collection2csv/convertor.rb, line 22 def validate validate_columns if @column_names_from_params.present? validate_associations if @associations_from_params.present? end
validate_association_column_names()
click to toggle source
# File lib/collection2csv/convertor.rb, line 65 def validate_association_column_names @associations.each do |association_key , association_value| false_columns = association_value - @association_class_names[association_key.to_s].constantize.column_names raise_error(false_columns,'column',association_key) unless false_columns.empty? end end
validate_association_keys()
click to toggle source
# File lib/collection2csv/convertor.rb, line 54 def validate_association_keys non_associative_keys = @associations.keys - @klass.reflections.keys raise_error(non_associative_keys,'association') unless non_associative_keys.empty? end
validate_associations()
click to toggle source
# File lib/collection2csv/convertor.rb, line 47 def validate_associations unless @associations.empty? get_association_class_names validate_association_column_names end end
validate_columns()
click to toggle source
# File lib/collection2csv/convertor.rb, line 32 def validate_columns false_columns = @column_names - @klass.column_names raise_error(false_columns,'column',@klass.name) unless false_columns.empty? end