# File lib/dbi/utils/tableformatter.rb, line 30
 30:             def self.ascii(header, 
 31:                            rows, 
 32:                            header_orient=:left, 
 33:                            rows_orient=:left, 
 34:                            indent=2, 
 35:                            cellspace=1, 
 36:                            pagebreak_after=nil,
 37:                            output=STDOUT)
 38: 
 39:                 if rows.size == 0 or rows[0].size == 0
 40:                     output.puts "No rows selected"
 41:                     return
 42:                 end
 43: 
 44:                 header_orient ||= :left
 45:                 rows_orient   ||= :left
 46:                 indent        ||= 2
 47:                 cellspace     ||= 1
 48: 
 49:                 # pagebreak_after n-rows (without counting header or split-lines)
 50:                 # yield block with output as param after each pagebreak (not at the end)
 51: 
 52:                 col_lengths = (0...(header.size)).collect do |colnr|
 53:                     [
 54:                         (0...rows.size).collect { |rownr|
 55:                         value = rows[rownr][colnr]
 56:                         coerce(value).size
 57:                     }.max,
 58:                         header[colnr].size
 59:                     ].max
 60:                 end
 61: 
 62:                 indent = " " * indent
 63: 
 64:                 split_line = indent + "+"
 65:                 col_lengths.each {|col| split_line << "-" * (col+cellspace*2) + "+" }
 66: 
 67:                 cellspace = " " * cellspace
 68: 
 69:                 output_row = proc {|row, orient|
 70:                     output << indent + "|"
 71:                     row.each_with_index {|c,i|
 72:                         output << cellspace
 73: 
 74:                         str = coerce(c)
 75: 
 76:                         output << case orient
 77:                         when :left then   str.ljust(col_lengths[i])
 78:                         when :right then  str.rjust(col_lengths[i])
 79:                         when :center then str.center(col_lengths[i])
 80:                         end 
 81:                         output << cellspace
 82:                         output << "|"
 83:                     }
 84:                     output << "\n" 
 85:                 } 
 86: 
 87:                 rownr = 0
 88: 
 89:                 loop do 
 90:                     output << split_line + "\n"
 91:                     output_row.call(header, header_orient)
 92:                     output << split_line + "\n"
 93:                     if pagebreak_after.nil?
 94:                         rows.each {|ar| output_row.call(ar, rows_orient)}
 95:                         output << split_line + "\n"
 96:                         break
 97:                     end      
 98: 
 99:                     rows[rownr,pagebreak_after].each {|ar| output_row.call(ar, rows_orient)}
100:                     output << split_line + "\n"
101: 
102:                     rownr += pagebreak_after
103: 
104:                     break if rownr >= rows.size
105: 
106:                     yield output if block_given?
107:                 end
108: 
109:             end