Sha256: 4297e71a762a1695808a1f0f306d9d6ba53c0afb99d9838a77ea66db15c817fe

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

require 'csv'
module CsvRails
  module Array
    def self.included(base)
      base.send(:remove_method, :to_csv)
    end

    # ==== Options
    # * <tt>:fields</tt> - target field names
    # * <tt>:header</tt> - header
    # * <tt>:without_header</tt> - total_count
    # * <tt>:encoding</tt> - encoding
    # * <tt>:i18n_scope</tt> - i18n scope
    def to_csv(opts={})
      klass = first.class
      fields = if opts[:fields]
                 opts.delete(:fields)
               elsif klass.respond_to?(:csv_fields)
                 klass.csv_fields
               else
                 []
               end

      header = if opts[:header]
                 opts.delete(:header)
               elsif klass.respond_to?(:csv_header)
                 klass.csv_header(fields, opts.delete(:i18n_scope))
               else
                 scopes = ['csv_rails']
                 scopes << opts[:i18n_scope] if opts[:i18n_scope]
                 fields.map{|f|
                   defaults = scopes.map{|s| "#{s}.#{f}".to_sym }.push(f.to_s)
                   I18n.t(defaults.shift, :default => defaults)
                 }
               end
      csv = CSV.generate do |_csv|
        _csv << header if header && !opts[:without_header]
        each do |element|
          _csv << element.to_csv_ary(fields, opts)
        end
      end
      opts[:encoding] ? csv.encode(opts[:encoding]) : csv
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
csv_rails-0.6.0 lib/csv_rails/array.rb