Description

Just another HTML table generator for ruby.
Generate HTML tables with ease (HTML4, XHTML and HTML5).
Generate portrait, landscape and other rotated views. Handles
rotating table attributes via HTML-AutoTag.

Installation

gem install Spreadsheet-HTML

Synopsis

require 'Spreadsheet/HTML'

data = Array[ [1,2,3], [4,5,6], [7,8,9] ]
generator = Spreadsheet::HTML.new()
puts generator.generate( data )
puts generator.generate( 'data' => data )

generator = Spreadsheet::HTML.new( 'data' => data, 'indent' => "\t" )
puts generator.portrait( 'encodes' => 1 )
puts generator.landscape( 'encode' => 1 )

puts generator.generate( 'tgroups' => 1 )
puts generator.generate( 'tgroups' => 2, 'indent' => nil )

puts generator.generate( 'tr' => { 'class' => %w{ odd even } } )

# See t/ directory for more examples

Dependencies

HTML-AutoTag

Methods

With the exception of new, all methods return an HTML table as a string.

new( params )

Constructs a new generator configured with given params. These params will be used
for each call to a generator method. Any params specified in the constructor
may be overriden in a subsequent call to a generator method (which are listed next).

generate( params )

Generates an HTML table with headings positioned at the top.

portrait( params )

Generates an HTML table with headings positioned at the top.

north( params )

Generates an HTML table with headings positioned at the top.

landscape( params )

Generates an HTML table with headings positioned at the left.

west( params )

Generates an HTML table with headings positioned at the left.

south( params )

Generates an HTML table with headings positioned at the bottom.

east( params )

Generates an HTML table with headings positioned at the right.

Literal Parameters

Literal Parameters provides the means to modify the macro aspects of the table,
such as indentation, encoding, data source and table orientation.

data

  The data to be rendered as an HTML table. Array of Arrays.

'data' = > [ [ 1, 2, 3 ], [ 4, 5, 6 ], [7, 8, 9 ] ]

tgroups

  Integer (0, 1 or 2). Group table rows into <thead>, <tbody> and <tfoot> sections.
  When tgroups is set to 1, the <tfoot> section is omitted. The last row of the data
  is found at the end of the <tbody> section instead. (loose) When tgroups is set to 2,
  the <tfoot> section is found in between the <thead> and <tbody> sections. (strict)

'tgroups' => 1
'tgroups' => 2

indent

  The string to indent each row by. Defaults to undefined which produces no indentation.
  Automatically adds newlines when set to any defined value.

'indent' => '    '
'indent' => "\t"

level

  Positive integer. The level to start indentation at. This is useful for matching the nesting styles of
  original HTML text that you may wish in insert into. (A value of 4 says "apply the repitition operator
  to the value of indent 4 times.)

'level' => 3

empty

  String. Render any empty cells with this value. Defaults to &nbps; 

'empty' => ''

encode

  Boolean. Whether or not to Encode entities.

'encode' => 1

encodes

  String. Encode these HTML entities. Pass string with chars you want encoded
  or leave blank for default control and high bit chars and <>!'"

'encodes' => '<>'

matrix

  Boolean. Render the headings row with only <td> tags, no <th> tags.

'matrix' => 1

headless

  Boolean. Render the table without the headings row at all.

'headless' => 1

theta

  Rotates table clockwise for positive values and counter-clockwise for negative values.
  Default is 0: headings at top. 90 yields headings at right, 180 yields headings at bottom.
  270 yields headings at left. To achieve landscape, use -270 (or use the landscape() method).

'theta' => -270

flip

  Flips the table horizontally from the perspective of the headings "row" by
  negating the value of theta.

'flip' => 1

pinhead

  Works in conjunction with theta to ensure reporting readability. Without it, south() and east()
  would have data cells arranged in reverse order.

'pinhead' => 1

fill

  Can be used instead of data to create a "blank" table or with data to pad rows and cells.

'fill' => '8x12' # 8 rows, 12 columns

Dynamic Parameters

Dynamic parameters provide a means to control the micro elements of the table,
such as modifying headings by their name and rows and columns by their indices.
They contain leading underscores to seperate them from literal and tag parameters.
They accepts Hashes for use as tag attributes, Procs or lambdas for altering the
CDATA of the cell, or Arrays that contain either (just like the 'td' and 'th' Tag
Parameters described below).

_rX

  Apply these attributes to row X (zero index based).

'_r2' => { 'class' => 'third-row' }
'_r2' => lambda { |c| c.upcase }
'_r2' => [ lambda { |c| c.upcase }, { 'class' => 'third-row' } ]

_cX

  Apply these attributes to colum X (zero index based). You can also alias any
  column by the value of the heading name in that column prepended with underscore (_)

'_c4' => { 'class' => 'fifth-column' }
'_c4' => lambda { |c| c.upcase }
'_c4' => [ lambda { |c| c.upcase }, { 'class' => 'fifth-column' } ]

'_occupation' => { 'class' => 'foo' }
'_salary' => lambda { |c| c.capitalize }

_rXcY

  Apply these attributes to colum Y in row X (zero index based).

'_r2c4' => { 'class' => 'third-row-fifth-column' }
'_r2c4' => lambda { |c| c.upcase }
'_r2c4' => [ lambda { |c| c.upcase }, { 'class' => 'third-row-fifth-column' } ]

Tag Parameters

Tag Parameters provide a means to control the attributes of the table's tags, and in
the case of <th> and <td> the contents via callback subroutines. Although
similar in form, they are differentiated from litertal parameters because they share
the names of the actual HTML table tags.

table

  Hash. Apply these attributes.

'table' => { 'class' => 'spreadsheet' }

thead

  Hash. Apply these attributes.

'thead' => { 'class' => 'headings' }

tfoot

  Hash. Apply these attributes.

'tfoot' => { 'class' => 'footings' }

tbody

  Hash. Apply these attributes.

'tbody' => { 'class' => 'bodyings' }

tr

  Hash. Apply these attributes.

'tr => { 'class' => %w{ odd even } }

th

  <th> and <td> are the only Tag Parameters that also accept callback methods.

'th' => { 'style' => { 'color' => %w{ red green blue } } }
'th' => lambda { |c| c.upcase }
'th' => [ { 'style' => { 'color' => %w{ red green blue } }, lambda { |c| c.upcase } ]

td

  <th> and <td> are the only Tag Parameters that also accept callback methods.

'td' => { 'style' => { 'color' => %w{ red green blue } } }
'td' => lambda { |c| c.upcase }
'td' => [ { 'style' => { 'color' => %w{ red green blue } }, lambda { |c| c.upcase } ]

caption

  Caption is special in that you can either pass a string to be used as CDATA or a hash whose only
  key is the string to be used as CDATA.

'caption' => 'Just Another Title'

'caption' => { 'A Title With Attributes' => { 'align' => 'bottom' } }

colgroup

  Add colgroup tag(s) to the table. Use an AoH for multiple.

colgroup => { 'span => '2', 'style' => { 'background-color' => 'orange' } }

colgroup => Array[ { 'span => '20' }, { 'span' => '1', 'class' => 'end' } ]

col

  Add col tag(s) to the table. Use an AoH for multiple. Wraps tags within a colgroup tag. Same usage as colgroup.

col => { 'span' => '2', 'style' => { 'background-color' => 'orange' } }

col => Array[ { 'span' => 20 }, { 'span' => '1', 'class' => 'end' } ]

thead.tr

  When tgroups is 1 or 2, this tag parameter is available to control the attributes of
  the <tr> tag within the <thead> group.

'thead.tr' => { 'class' => 'body-cell' }

tfoot.tr

  When tgroups is 2, this tag parameter is available to control the attributes of
  the <tr> tag within the <tfoot> group.

'tbody.tr' => { 'class' => 'body-cell' }

License

MIT

Warranty

This package is provided "as is" and without any express or
implied warranties, including, without limitation, the implied
warranties of merchantability and fitness for a particular purpose.

Author

Jeff Anderson
jeffa@cpan.org