Sha256: a7e966bd3d2ad6fa9b84cedf2b0adf460fb6f967ad94d786080a74fbe0aec3b3

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

# coding: utf-8

require 'csv'

module ActiveExport
  class Csv < ::ActiveExport::Base
    # @param [Array, ActiveRecord::Relation] data
    # @param [Symbol, String] source
    # @param [Symobl, String] namespace
    # @param [Hash] options ({})
    # @option options [Array] :eval_methods
    # @option options [Array] :label_keys
    # @option options [String] :label_prefix
    # @option options [Hash] :csv_options (see http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html)
    # @exmaple
    #   AcriveExport::Csv.export(data, :source, :namespace)
    def self.export(data, source, namespace, options = {})
      new(source, namespace, options).export(data, options)
    end

    def export(data, options = {})
      return '' if data.length <= 0 && eval_methods.nil?
      csv_options = self.config.default_csv_options.merge( options[:csv_options] || {} )

      each_method_name = data.respond_to?(:find_each) ? 'find_each' : 'each'
      # 1.9.2
      CSV.generate(csv_options) do |csv|
        csv << generate_header
        data.send(each_method_name) do |f|
          csv << generate_value(f)
        end
      end
    end

    def generate_header
      self.label_keys.inject([]) {|result, key|
        result << translate(key_name(key))
      }
    end

    def generate_value(row)
      self.eval_methods.inject([]){|result, f|
        v = row.send(:eval, f) rescue nil
        result << convert(v)
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_export-0.1.0 lib/active_export/csv.rb