#: Greg Brown changed the world a bit at a time by saying on  8/11/2005 5:46 AM :#
> For as long as I can remember the end of the summer meant slaving over
> some Free Software project before I went back to school.  This year
> will be no exception.  I am currently trying to develop and mature a
> pure ruby reporting tool based on a very clever hack that James Edward
> Gray II shared with me (along with some great ideas).  Basically, I am
> trying to make a tool that will allow you to run queries against a
> database and then get them to painless output to basically whatever
> format you'd like weilding the power of Erb and other great tools such
> as PDF::Writer.  So far, the system I have built is functional but far
> from robust.  It allows you to execute SQL statements passed as
> strings, passed in from files, or even passed in from the database
> itself and then gives you a row by row iterator which can be called
> from within a template OR a pure ruby file.  I am also currently
> working on implementing a simple DSL wrapper around SQL to allow easy
> generation of queries.  I have a few ideas for functions I'd like to
> add, but I figured the best bet would be to ask the community what
> kinds of features they'd like to see in a pure ruby report generation
> tool.  If you let me know what you'd like to see in such a tool soon,
> there is a good chance it will end up in Ruport 0.1.0 ([Ru]by
> Re[port]s) which will be released on August 28th on RubyForge.  So...
> if you had your ideal reporting tool in Ruby, what would it be like?
> 
> My job is paying me to work on this project despite the fact that it is
> under the GPL, therefore the more requests you make, the longer I can
> justify working on this instead of the (gulp) .Net system they've been
> developing.
> 
>  Below I've posted a little snippet of Ruport calling a query out of
> the database itself (config and query not shown) and then generating a
> PDF.  This is actual functional code which prints out customer labels.
> 
> Also... scouts honor on a first release of Gambit (The game design
> software James and I built) before the end of the summer.
> 
> With no further ado, a (rudimentary) Ruport example.
> 
> 
> require 'pdf/writer'
>  pdf = PDF::Writer.new
>  pdf.select_font "Times-Roman"
>  pdf.margins_mm(12,0,20,0)
>  pdf.start_columns(3,27)
>  sql_stored( "RUPORT_QUERIES", "RECALL") do |row|
>  	row["DUEDATE"] = row["DUEDATE"].to_s.slice( 0 .. 9)
>  	row["ZIP"] = row["ZIP"].to_s.slice(0..4)
>    pdf.start_new_page if pdf.lines_remaining < 5
>    pdf.text "Due: #{row["DUEDATE"]}\n" +
>            "#{row["FIRSTNAME"]} #{row["LASTNAME"]}\n" +
>            "#{row["STREET1"]}\n" +
> 			( row["STREET2"].eql?("") ? "" : row["STREET2"] + "\n" ) +
> 			"#{row["CITY"]}, #{row["STATE"]} #{row["ZIP"]}\n\n" +
> 			( row["STREET2"].eql?("") ? "\n" : "" ),
> 			:font_size => 11, :justification => :full
>  end
> <%= pdf.render %>
> 
> 
> 

Here are my .02 eurocents about a generic reporting tool:

i would probably split it into 2 modules: data feeders and report generator/formatter. This way you 
will be able to find feedback from more sources for both modules. Moreover you will have a very 
clean separation of concerns.

:alex |.::the_mindstorm::.|