fhwang.net

Lafcadio 0.4.0

Ive just released Lafcadio 0.4.0, which is the new production release.

If you dont know what Lafcadio is, its an object-relational mapping library for MySQL and Ruby. Its features include:

  • A test-centric design that allows you extensively unit test any program that runs on top of Lafcadio. It comes with a MockObjectStore, which mimics the database and allows you to test database interactions without all the annoying setup code of a real database-driven test.
  • A block-driven querying language that will cover 99% of the ad-hoc queries you have to do. These queries look like:
    child_users = object_store.getUsers { |user| user.age.lt( 18 ) }
    These queries can be run against the MockObjectStore, meaning they can be unit-tested.
  • In-Ruby triggers that can be written per domain class. These triggers can be tested, too!
  • Lafcadio makes very few assumptions of how your database was setup, and comes complete with a lot of hooks to allow you to fit your pre-existing database. Because programmings a messy job, and were always cleaning up after somebodys mistakes (even if they were our own).

Lafcadio is production-ready and runs a number of websites, including Rhizome.org, which more than 3 million hits a month.

0.4.0 contains a number of new features over the previous stable releases:

  • Optimizations which cache retrievals intelligently, and do lazy evaluation of individual fields for cases in which you load rows that have many fields but you only care about a few.
  • A new syntax for ad-hoc querying which gives you a lot of expressive power with much less typing than before.
  • A lot less unnecessary code, and a lot more documentation for the code that remains.
  • The option to define domain class fields in an external XML file.
  • Lafcadio now uses DBI instead of Ruby/MySQL.
  • Lafcadio uses log4r for SQL logging.

There are a lot of small changes, and a number of warnings for those migrating forward from Lafcadio 0.2.x. Please read the changelog for full details.

blog comments powered by Disqus

« Previous post

Next post »