Module: CSVision::CSVHelper::ClassMethods

Defined in:
lib/csvision/csv_helper.rb

Instance Method Summary collapse

Instance Method Details

#to_csv(options = { :headers => true, :batch_size => 100 }) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/csvision/csv_helper.rb', line 19

def to_csv(options={ :headers => true, :batch_size => 100 })
  options[:delimeter]   ||= csv_delimeter
  options[:separator]   ||= csv_separator
  options[:batch_size]  ||= 100

  unless self.count < 1
    headers, csv_array  = nil, []
    self.find_each :batch_size => options[:batch_size] do |object|
      unless self.body
        headers ||= object.csvize( object.attributes.only( *csv_only ).keys,     options ) if csv_only    && !csv_only.empty?
        headers ||= object.csvize( object.attributes.except( *csv_except ).keys, options ) if csv_except  && !csv_except.empty?

        csv_array << object.to_csv( options.merge(:headers => false) )
      else
        values    = self.body.call object
        headers ||= object.csvize( self.csv_headers, options ) if self.csv_headers
        csv_array << object.csvize( values, options )
      end
    end

    content = csv_array.join("\n")
    return headers + "\n" + content if options[:headers]
    content
  end
end