Sha256: 45d300e9e4e528e550def140262e39eef7844b2476fb1cc1d5b46ca433ace86a

Contents?: true

Size: 1.04 KB

Versions: 10

Compression:

Stored size: 1.04 KB

Contents

require 'csv'

module Canvas::Utils
  class Csv

    def self.hash_csv(csv_string)
      CSV.parse(csv_string, {:headers => true, :return_headers => false, :header_converters => :symbol} )
    end

    def self.hash_csv_file(file_path)
      CSV.read(file_path, {:headers => true, :return_headers => false, :header_converters => :symbol} )
    end

    def self.create_csv(models, headers)
      CSV.generate do |csv|
        csv << headers.map do |header|
          header.instance_of?(Hash) ? header.values.first.to_s : header.to_s
        end
        models.each do |model|
          csv << headers.map do |header|
            const = header.instance_of?(Hash) ? header.keys.first : header
            model.respond_to?(const) ? model.send(const) : nil
          end
        end
      end
    end

    def self.unzip_csv(zip)
      {}.tap do |h|
        Zip::InputStream.open(StringIO.new(zip)) do |archive|
          while entry = archive.get_next_entry
            h[entry.name] = self.hash_csv(archive.read)
          end
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
integration_pal-0.2.3 app/models/canvas/utils/csv.rb
integration_pal-0.2.2 app/models/canvas/utils/csv.rb
integration_pal-0.2.1 app/models/canvas/utils/csv.rb
integration_pal-0.2.0 app/models/canvas/utils/csv.rb
integration_pal-0.1.6 app/models/canvas/utils/csv.rb
integration_pal-0.1.5 app/models/canvas/utils/csv.rb
integration_pal-0.1.4 app/models/canvas/utils/csv.rb
integration_pal-0.1.3 lib/canvas/utils/csv.rb
integration_pal-0.1.2 lib/canvas/utils/csv.rb
integration_pal-0.1.1 lib/canvas/utils/csv.rb