I’ll try not to turn this into a pander-fest, but I’ve got a few announcements, and since this blog is finally starting to get some great reader commentary, this is as good a place as any to make them. If you’re just interested in hacking with Ruport, you can check out the 1.0 release notes.

If you’re already sick of hearing about Ruport from me, I promise to quiet down soon :)

What is this damn Ruport thing I see you mention in all your posts?

The Ruby Reports project is dedicated to making your business reporting life suck less (through ruby).

The ruport package is a lightweight foundation for reporting apps that provides a super-extensible formatting system and tools for data acquistion and manipulation.

We also support more specialized tools through the ruport-util package and Rails-centric features via acts_as_reportable

A quick example

This is nabbed straight from the examples on our homepage. You’ll want to look at the ones distributed with the source unless your needs are super simple, but this gives a basic idea of how some Ruport code might look.

Say you have a CSV file with the following data:

  name,login time,machine
  Gregory,10:00,bittle
  Joe,11:45,soda
  Jim,9:00,kitten
  Joe,12:15,soda
  Gregory,5:00,kitten
  Joe,12:45,bittle

You want to do a simple task: Get a pretty printable version of that data, seperated out by names.

The following code will get you a PDF:

  t = Table("foo.csv")
  grouping = Grouping(t,:by => "name")
  puts grouping.to_pdf

And your final report would look like this (click for PDF):

That’s a simplified example of course, but it shows at least that we haven’t complicated the easy tasks in Ruport. The real interesting stuff happens when you dig a little deeper, of course, so please do!

Mixing things up a little

I’ve been referred to as “The Ruport Guy” for almost two years now, and it’s about time to change that!

Maybe 6 months ago, a number of our contributors pushed me in the right direction and made me create a 1.0 Roadmap. Dudley Flanders and James Healy helped me focus it in such a way that it wouldn’t take decades, and I began working on it with plenty of help from some great contributors.

In late January, Michael Milner joined up and pretty quickly became extremely helpful to us. He eventually became the maintainer of our rails plugin (acts_as_reportable), and fought his way through a giant list of change requests, eventually getting the core support for ActiveRecord so polished that it’s now in the Ruport gem.

We’re now at the end of my roadmap, and by now, Mike knows the Ruport codebase and its community as well as I do. He’s also not sure if the current codebase is going to bring him as far as he needs to be. For this reason, as of 1.0, he’s taking the lead for the project. I’ll maintain the stable releases, work on building utilities, keep active with the community, and maybe on the surface, things won’t change so much. But the real win here is that we’re giving a chance for new innovations to crop up, and new leadership will do well for keeping us on our toes.

1.0 == Nostalgia

I made my first post about Ruport to the RubyTalk mailing on August 10th, 2005. One season short of two years later, it has finally made it to 1.0.

Needless to say, it’s been a long and wild ride. This toolset started off as a set of hacks nailed onto an ERb wrapper, and is now doing things like generating beautiful PDFs from ActiveRecord finds and doing complex grouping operations and other cool stuff that I never expected it to.

I’ve said it before and I’ll say it again: Reporting Sucks. That means our community is made up of very brave contributors who are willing to work on projects that aren’t particularly sexy or easy. I hope that even if our userbase grows, that sense of general willingness to be helpful will be preserved.

It’s what made this *almost* fun for 2 years. :)

I hope that if you have reporting needs, Ruport can be helpful to you. And now, with a new lead developer, if you found me incorrigibly difficult to work with, you get a second chance!