lib/to_xls.rb in to_xls-0.1.2 vs lib/to_xls.rb in to_xls-1.0.0

- old
+ new

@@ -1,71 +2 @@ -require 'rubygems' -require 'spreadsheet' -require 'stringio' - -class Array - # Options for to_xls: columns, name, header - def to_xls(options = {}) - - book = Spreadsheet::Workbook.new - sheet = book.create_worksheet - - sheet.name = options[:name] || 'Sheet 1' - - if self.any? - columns = options[:columns] || self.first.attributes.keys.sort - - if columns.any? - line = 0 - - unless options[:headers] == false - if options[:headers].is_a?(Array) - sheet.row(0).concat options[:headers].collect(&:to_s) - else - aux_headers_to_xls(self.first, columns, sheet.row(0)) - end - line = 1 - end - - self.each do |item| - row = sheet.row(line) - columns.each {|column| aux_to_xls(item, column, row)} - line += 1 - end - end - end - - return book - end - - def to_xls_data(options = {}) - data = StringIO.new('') - self.to_xls(options).write(data) - return data.string - end - - private - def aux_to_xls(item, column, row) - if item.nil? - row.push(nil) - elsif column.is_a?(String) or column.is_a?(Symbol) - row.push(item.send(column)) - elsif column.is_a?(Hash) - column.each{|key, values| aux_to_xls(item.send(key), values, row)} - elsif column.is_a?(Array) - column.each{|value| aux_to_xls(item, value, row)} - end - end - - def aux_headers_to_xls(item, column, row) - if item.nil? - row.push(nil) - elsif column.is_a?(String) or column.is_a?(Symbol) - row.push("#{item.class.name.underscore}_#{column}") - elsif column.is_a?(Hash) - column.each{|key, values| aux_headers_to_xls(item.send(key), values, row)} - elsif column.is_a?(Array) - column.each{|value| aux_headers_to_xls(item, value, row)} - end - end - -end +require 'to_xls/array_patch.rb'