Wow, best news in a while! I can't wait to dig into this. A lot of Ruby love this Valentine Day. Thank you, -Harold On 2/14/06, Assaph Mehr <assaph / gmail.com> wrote: > = About Ackbar > > Ackbar is an adapter for ActiveRecord (the Rails ORM layer) to the KirbyBase > pure-ruby plain-text DBMS. Because KirbyBase does not support SQL, joins or > transactions, this is not a 100% fit. There are some changes to the ActiveRecord > interface (see below), but it may still be useful in some cases. > > = URIs > > Ackbar: http://ackbar.rubyforge.org > KirbyBase: http://www.netpromi.com/kirbybase_ruby.html > Rails: http://www.rubyonrails.com > Pimki: http://pimki.rubyforge.org > > = Goals > > Ackbar's project goals, in order of importance, are: > 1. Support Pimki with a pure-ruby, cross-platform hassle-less install DBMS > 2. An exercise for me to learn ActiveRecord inside out > 3. Support other "shrink-wrapped" Rails projects with similar needs > > As can be seen, the main reason I need Ackbar is so I distribute Pimki across > multiple platforms without requiring non-Ruby 3rd party libraries. > KirbyBase will > work wherever Ruby works, and so will Pimki. That alleviates the need > to repackage > other bits, end users will not have to install extra software, I have > full control > on the storage, the storage is in plain text. Just what I need to "shrink wrap" > a Rails project for end-user distribution. > > = What's Covered > > Ackbar currently passes through a small bootstrap test suite, and through about > 80% of the ActiveRecord test suite. I will never pass 100% of the tests because > KirbyBase does not support all required functionality. > > Ackbar includes a SQL fragment translator, so that simple cross-database code > should be maintainable. For example the following will work as expected, > Book.find :all, :conditions => "name = 'Pickaxe'" > Book.find :all, :conditions => ["name = ?", 'Pickaxe'] > Additionally, you can also provide blocks: > Book.find :all, :conditions => lambda{|rec| rec.name == 'Pickaxe'} > or even: > Book.find(:all) {|rec| rec.name == 'Pickaxe'} > > Most of these changes are around the #find method, bit some apply to #update and > associations. Basic SQL translation should work the same, but you can always > provide custom code to be used. See the CHANGELOG and the tests for examples. > > > = What's Not Covered > > * Transactions > * Joins, and therefore Eager Associations > * Mixins > * Other plugins > > On the todo list is support for mixins. It might even be possible to > rig something > to simulate joins and eager associations, but that is for a later > stage. Transactions > will obviously only be supported once they are supported by KirbyBase. > > Additionally, there are numerous little changes to the standard behaviour. See > the CHANGELOG and the tests for more details. These may cause little > heart attacks > if you expect a standard SQL database. > > It is also worth noting that other plugins that write SQL will not > work. You will > need to get a copy of them to your /vendors dir and modify the relevant parts. > > = Installation > > Simply: > gem install ackbar > or download the zip file from http://rubyforge.org/projects/ackbar and > just stick > kirbybase_adapter.rb in the Rails lib dir. > > You will then need to add > require 'kirbybase_adapter' > in the config/environment.rb file of your project. > > If you plan on multi-database development / deployment, you must > require the adapter > only if necessary: > require 'kirbybase_adapter' if > ActiveRecord::Base.configurations[RAILS_ENV]['adapter'] == 'kirbybase' > > This is because Ackbar overrides certain methods in ActiveRecord::Base > and others. > These methods translate the standard SQL generation to method calls on > KirbyBase, > and obviously should not be overridden for regular DBs. > > > Please do not hesitate to contact me for questions, comments, whacks > on the head with a clue stick :-) > > Cheers, > Assaph > >