Sha256: e475b9e68c60ee16db9f3df1a62a416b0f839aefb9b658537463766becc14dc0

Contents?: true

Size: 1.62 KB

Versions: 41

Compression:

Stored size: 1.62 KB

Contents

require 'csv'

module Sunrise
  module Utils
    class CsvDocument
      def initialize(source, options = {})
        @source = source
        @options = options
        @klass = (@options.delete(:klass) || extract_klass)
      end
      
      def columns_names
        @columns_names ||= (@options[:columns] || @klass.column_names)
      end
      
      def human_columns_names
        @human_columns_names ||= columns_names.map { |column| @klass.human_attribute_name(column.to_s) }
      end
      
      def filename
        @filename ||= [(@options[:filename] || @klass.model_name.plural || "document"), ".csv"].join
      end
      
      def render
        csv_string = ::CSV.generate do |csv|
          csv << human_columns_names
          
          each_with_index do |record, index|
            row = columns_names.inject([]) do |result, column|
              result << record.send(column)
              result
            end
            
            csv << row
          end
        end
      end
      
      def each_with_index
        count = 0
        
        if @source.respond_to?(:find_each)
          @source.find_each do |item|
            yield item, count
            count += 1
          end
        else
          Array.wrap(@source).each do |item|
            yield item, count
            count += 1
          end
        end
      end
      
      protected
      
        def extract_klass
          if @source.respond_to?(:klass)
            @source.klass 
          elsif @source.is_a?(Array)
            @source.first.try(:class)
          else
            @source.class
          end
        end
      
    end
  end
end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
sunrise-cms-1.0.6 lib/sunrise/utils/csv_document.rb
sunrise-cms-1.0.5 lib/sunrise/utils/csv_document.rb
sunrise-cms-1.0.4 lib/sunrise/utils/csv_document.rb
sunrise-cms-1.0.3 lib/sunrise/utils/csv_document.rb
sunrise-cms-1.0.2 lib/sunrise/utils/csv_document.rb
sunrise-cms-1.0.1 lib/sunrise/utils/csv_document.rb
sunrise-cms-1.0.0 lib/sunrise/utils/csv_document.rb
sunrise-cms-1.0.0.rc3 lib/sunrise/utils/csv_document.rb
sunrise-cms-1.0.0.rc2 lib/sunrise/utils/csv_document.rb
sunrise-cms-1.0.0.rc1 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.7.0.rc2 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.7.0.rc1 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.6.11 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.6.10 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.6.9 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.6.8 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.6.7 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.6.6 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.6.5 lib/sunrise/utils/csv_document.rb
sunrise-cms-0.6.4 lib/sunrise/utils/csv_document.rb