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