Sha256: cbe12e485f53a30dd5357de3c8b959a8c06e36cc945273acb2cbd42bcd91e934

Contents?: true

Size: 1.72 KB

Versions: 16

Compression:

Stored size: 1.72 KB

Contents

module ControllerMixins
  module CsvInstanceMethods
    require 'csv'

    def to_csv(objects, skip_attributes=[], delimiter= ",")
      return "" if objects.blank?
      objects_class = objects.first.class
      filtered_columns = objects_class.column_names - skip_attributes
      CSV.generate do |csv|
        csv << filtered_columns
        objects.each do |object|
          csv << filtered_columns.collect { |a| object.attributes[a].blank? ? '' : "'#{object.attributes[a]}'" }
        end
      end
    end

    def generate_and_return_csv(csv_array, name = "export.csv", encoding = "UTF-8", delimiter = ";")
      csv = CSV.generate(encoding: encoding, col_sep: delimiter, force_quotes: true) do |csv|
        csv_array.each do |row|
          csv << row
        end
      end

      #Then spit out the csv with BOM as the response:
      csv = "\xEF\xBB\xBF".force_encoding("UTF-8") + csv if ["UTF-8"].include?(encoding)

      csv = "\xFF\xFE".force_encoding("UTF-16LE") + csv if ["UTF-16LE"].include?(encoding)


      send_data csv, :type => 'text/csv', :filename => name #,:disposition => 'attachment'
    end

    def get_data_for_csv_from_settings(settings, encoding = "UTF-8")
      data_for_csv = []
      header_of_names = []
      header_of_labels = []
      settings[:columns].each do |c|
        header_of_names << c[:name].to_s.encode(encoding, "UTF-8")
        header_of_labels << c[:label].to_s.encode(encoding, "UTF-8")
      end
      data_for_csv << header_of_names
      data_for_csv << header_of_labels

      settings[:data].each do |c|
        row = []
        c.each_pair do |name, value|
          row << value.to_s.encode(encoding, "UTF-8")
        end
        data_for_csv << row
      end
      data_for_csv
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
it-logica-application-backbone-1.2.17 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.16 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.15 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.14 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.13 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.12 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.11 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.10 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.9 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.8 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.7 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.6 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.5 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.4 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.3 lib/controller_mixins/csv_instance_methods.rb
it-logica-application-backbone-1.2.2 lib/controller_mixins/csv_instance_methods.rb