lib/csv_rails/array.rb in csv_rails-0.5.2 vs lib/csv_rails/array.rb in csv_rails-0.6.0
- old
+ new
@@ -1,40 +1,45 @@
require 'csv'
module CsvRails
module Array
def self.included(base)
base.send(:remove_method, :to_csv)
- base.send(:include, CsvRails::Array::InstanceMethods)
end
- module InstanceMethods
- # ==== 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={})
- fields = opts[:fields]
- header = if opts[:header]
- opts.delete(:header)
- elsif (klass = first.class).respond_to?(:csv_fields)
- klass.csv_fields
- 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)
- } if fields
- end
- csv = CSV.generate do |_csv|
- _csv << header if header && !opts[:without_header]
- each do |element|
- _csv << element.to_csv_ary(fields, opts)
- 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
- opts[:encoding] ? csv.encode(opts[:encoding]) : csv
end
+ opts[:encoding] ? csv.encode(opts[:encoding]) : csv
end
end
end