Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
[ANN] Lafcadio 0.9.3: PostgreSQL support, eager loading, more
Francis Hwang
3/22/2006 5:13:00 AM
The newest development release of Lafcadio, 0.9.3, now supports
PostgreSQL, adds eager loading, and has a few more additions.
As always, odd-numbered releases should be considered beta. If you want
to play it safe, use 0.8.3 instead.
http://lafcadio.ruby...
== What's Lafcadio? ==
Lafcadio is an object-relational mapping library for use with MySQL. It
supports a lot of advanced features, including extensive aid in mapping
to legacy databases, in-Ruby triggers, and an advanced query engine
that allows you to form queries in Ruby that can be run either against
the live database, or an in-memory mock store for testing purposes.
I use it in production code on a regular basis, most notably at
Rhizome.org, an online community with more than 1 million pageviews a
month.
== What's new? ==
= PostgreSQL support =
Lafcadio now supports PostgreSQL. Activating is a simple matter of
setting 'dbtype' in LafcadioConfig:
LafcadioConfig.set_values(
'dbuser' => 'testuser', 'dbpassword' => 'password',
'dbname' => 'test_db', 'dbhost' => 'localhost', 'dbtype' => 'Pg'
)
Everything else -- single-row retrieval, transactions, query inference,
order and limit clauses -- works transparently across both MySQL and
PostgreSQL.
= Eager loading =
To prevent excessive selects, you can now use eager loading to load
across associations with one select statement:
all_invoices = Invoice.all( :include => :client )
# Knows Client information without incurring another select
all_invoices.first.client.name
= MockObjectStore handles transactions =
Transaction support was previously added, in 0.9.0, but I forgot to add
transaction support to the MockObjectStore. Now that the
MockObjectStore mimics the database, you can test transaction-dependent
logic in-memory, within having a real database installed.
For example, below is a (somewhat stupid) method that uses
transactions, with a test-case using the in-memory MockObjectStore:
def transfer_money( from_account, to_account, tr_amount )
object_store = Lafcadio::ObjectStore.get_object_store
object_store.transaction do |tr|
from_account.update!(
'amount' => from_account.amount - tr_amount
)
to_account.update!( 'amount' => to_account.amount + tr_amount )
tr.rollback if from_account.amount < 0
end
end
class TestTransferMoney < Test::Unit::TestCase
def test_rollback_if_less_than_zero
mock_object_store = MockObjectStore.new
ObjectStore.set_object_store mock_object_store
from_account = Account.new( 'amount' => 100.0 ).commit
to_account = Account.new( 'amount' => 0.0 ).commit
transfer_money( from_account, to_account, 200.0 )
from_account_prime = Account[from_account.pk_id]
assert_equal( 100.0, from_account_prime.amount )
end
end
Commits and rollbacks work for the test code, even if you don't have a
database installed.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
[ANN] Lafcadio 0.9.3: PostgreSQL support, eager loading, more
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password