Sha256: a0068afd0e8a04fc80f42a1a831d02120449803840aaa7d66cc84095a02d5d61

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

require 'csv'
module ActiveRecord
  module Acts
    module Csv
      def self.included(base)
        base.extend ClassMethods
        ::ActiveRecord::Relation.send(:include, ClassMethods)
        base.send(:include, InstanceMethods)
      end

      module ClassMethods
        def to_csv(opts={})
          fields = opts.delete(:fields) || attribute_names
          CSV.generate do |csv|
            csv << fields.map{|f|
              name = human_attribute_name(f)
              opts[:encoding] ? name.encode(opts[:encoding]) : name
            } unless opts[:without_header]
            all.each{|row| csv << row.to_csv_ary(fields) }
          end
        end
      end

      module InstanceMethods
        def to_csv_ary(fields=nil, opts={})
          fields = attribute_names unless fields
          fields.map{|field|
            convert_method = "#{field}_as_csv"
            method = respond_to?(convert_method) ? convert_method : field
            value = send(method)
            opts[:encoding] ? value.to_s.encode(opts[:encoding]) : value
          }
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
csv_rails-0.3.0 lib/active_record/acts/csv.rb