module CsvRails::Array

Public Class Methods

included(base) click to toggle source
# File lib/csv_rails/array.rb, line 4
def self.included(base)
  base.send(:remove_method, :to_csv)
end

Public Instance Methods

separated_values(sep, opts) click to toggle source

Options

  • :fields - target field names

  • :header - header

  • :without_header - total_count

  • :encoding - encoding

  • :i18n_scope - i18n scope

# File lib/csv_rails/array.rb, line 15
def separated_values(sep, opts)
  row_sep = opts.delete(:row_sep) || :auto
  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(:col_sep => sep, :row_sep => row_sep) 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
to_csv(opts={}) click to toggle source
# File lib/csv_rails/array.rb, line 47
def to_csv(opts={})
  separated_values(",", opts)
end
to_tsv(opts={}) click to toggle source
# File lib/csv_rails/array.rb, line 51
def to_tsv(opts={})
  separated_values("\t", opts)
end