Sha256: b573100afb94128d934af347e0c317dd95dfe0856ec87575858ea36e0f9a7d7d

Contents?: true

Size: 1.47 KB

Versions: 1

Compression:

Stored size: 1.47 KB

Contents

class ReportBuilder
  class Table
    class TextGenerator < ElementGenerator
        
      def generate()
        t=@element
        t.calculate_widths
        total_width=t.total_width
        out=""
        if t.header.size>0
          out+=parse_hr(total_width)+"\n"                
          out+=parse_row(t,t.header)+"\n"
          out+=parse_hr(total_width)+"\n"
        end
        t.rows.each do |row|
          if row==:hr
            out+=parse_hr(total_width)+"\n"
          else
            out+=parse_row(t,row)+"\n"
          end
        end
        out+=parse_hr(total_width)+"\n"
        @generator.add_text(out)
      end
      # Parse a row
      def parse_row(t,row)
        row_ary=[]
        colspan_i=0
        row.each_index do |i|
          if colspan_i>0
            colspan_i-=1
          elsif row[i].is_a? ReportBuilder::Table::Colspan
            size = (i...(i+row[i].cols)).inject(0) {|a,v| a+t.max_cols[v]+3}
            size-=3
            row_ary.push(row[i].data.to_s+" "*(size - row[i].data.size))
            colspan_i=row[i].cols-1
          elsif row[i].nil?
            row_ary.push(" "*t.max_cols[i])
          else
            size=row[i].to_s.size
            #puts sprintf("%i : %s (%d-%d)",i,row[i].to_s,@max_cols[i], size)
            row_ary.push(row[i].to_s+" "*(t.max_cols[i] - size))
          end
        end
        "| "+row_ary.join(" | ")+" |"
      end
      # Parse a horizontal rule
      def parse_hr(l)
        "-"*l
      end
      end
    end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reportbuilder-0.1.0 lib/reportbuilder/table/textgenerator.rb