Class: Ruport::Format::Builder
- Inherits:
-
Object
- Object
- Ruport::Format::Builder
- Defined in:
- lib/ruport/format/builder.rb
Instance Attribute Summary collapse
-
#footer ⇒ Object
Returns the value of attribute footer.
-
#format ⇒ Object
Returns the value of attribute format.
-
#header ⇒ Object
Returns the value of attribute header.
-
#output_type ⇒ Object
Returns the value of attribute output_type.
-
#range ⇒ Object
Returns the value of attribute range.
Instance Method Summary collapse
-
#initialize(data_set) ⇒ Builder
constructor
A new instance of Builder.
- #render ⇒ Object
- #render_csv ⇒ Object
- #render_html ⇒ Object
- #render_pdf ⇒ Object
- #render_text ⇒ Object
Constructor Details
#initialize(data_set) ⇒ Builder
Returns a new instance of Builder.
5 6 7 8 9 10 11 12 13 |
# File 'lib/ruport/format/builder.rb', line 5 def initialize( data_set ) @data = data_set @original = data_set.dup @format = nil @range = nil @header = nil @footer = nil @output_type = nil end |
Instance Attribute Details
#footer ⇒ Object
Returns the value of attribute footer.
15 16 17 |
# File 'lib/ruport/format/builder.rb', line 15 def @footer end |
#format ⇒ Object
Returns the value of attribute format.
15 16 17 |
# File 'lib/ruport/format/builder.rb', line 15 def format @format end |
#header ⇒ Object
Returns the value of attribute header.
15 16 17 |
# File 'lib/ruport/format/builder.rb', line 15 def header @header end |
#output_type ⇒ Object
Returns the value of attribute output_type.
15 16 17 |
# File 'lib/ruport/format/builder.rb', line 15 def output_type @output_type end |
#range ⇒ Object
Returns the value of attribute range.
15 16 17 |
# File 'lib/ruport/format/builder.rb', line 15 def range @range end |
Instance Method Details
#render ⇒ Object
17 18 19 20 |
# File 'lib/ruport/format/builder.rb', line 17 def render @data = @range ? ( @original[@range] ) : ( @original ) send("render_#{@format}") end |
#render_csv ⇒ Object
22 23 24 25 26 27 28 29 |
# File 'lib/ruport/format/builder.rb', line 22 def render_csv csv_klass = defined?(FasterCSV) ? FasterCSV : CSV fields = @original.fields ( @header ? "#{@header}\n\n" : "" ) + @data.inject(csv_klass.generate_line(fields).chomp + "\n" ) { |out,r| out << csv_klass.generate_line(fields.map { |f| r[f] }).chomp + "\n" } + ( @footer ? "\n#{@footer}\n" : "" ) end |
#render_html ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/ruport/format/builder.rb', line 31 def render_html head_text = ( if @header " <tr>\n <th colspan=#{@original.fields.length}>#{@header}" + "</th>\n </tr>\n" end ) out = "<table>\n#{head_text} <tr>\n <th>"+ "#{@original.fields.join('</th><th>')}" + "</th>\n </tr>\n" @data.inject(out) do |html,row| html << row.inject(" <tr>\n "){ |row_html, field| row_html << "<td>#{field}</td>" } + "\n </tr>\n" end foot_text = ( if @footer " <tr>\n <th colspan=#{@original.fields.length}>#{@footer}" + "</th>\n </tr>\n" end ) out << "#{foot_text}</table>" return out unless @output_type.eql?(:complete) "<html><head><title></title></head><body>\n#{out}</body></html>\n" end |
#render_pdf ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/ruport/format/builder.rb', line 63 def render_pdf return unless defined? PDF::Writer pdf = PDF::Writer.new pdf.margins_cm(0) @data.each do |page| unless page.eql?(@data.pages.first) pdf.start_new_page end page.each do |section| section.each do |element| pdf.y = pdf.cm2pts(element.top) pdf.text element.content, :left => pdf.cm2pts(element.left), :right => pdf.cm2pts(element.right), :justification => element.align || :center end end end pdf.render end |
#render_text ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/ruport/format/builder.rb', line 54 def render_text header = @header ? "#{@header}\n" : "" header << "fields: ( #{ @original.fields.join(', ') } )\n" indices = (@range) ? @range.to_a : (0...@original.to_a.length).to_a @data.inject(header) do |output,row| output << "row#{indices.shift}: ( #{row.to_a.join(', ')} )\n" end + (@footer ? "#{@footer}\n" : "" ) end |