# \[ANN\] Ackbar 0.1.1 - ActiveRecord Adapter for KirbyBase

**URL:** <https://www.ruby-forum.com/t/ann-ackbar-0-1-1-activerecord-adapter-for-kirbybase/55306>\
**Category:** Ruby\
**Created:** [March 19, 2006, 1:10pm UTC](https://www.ruby-forum.com/t/ann-ackbar-0-1-1-activerecord-adapter-for-kirbybase/55306 "2006-03-19T13:10:35Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Assaph\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/41988e/32.png) [@Assaph\_M](https://www.ruby-forum.com/u/Assaph_M)\
**Post date:** [March 19, 2006, 1:10pm UTC](https://www.ruby-forum.com/t/ann-ackbar-0-1-1-activerecord-adapter-for-kirbybase/55306/1 "2006-03-19T13:10:35Z")

</div>

Hi All,

= What’s New

This is a bug fix release. Jamey C. (author of KirbyBase) has run  
through Active Web D. with Rails, building the Depot sample  
app on top of Akbar/KirbyBase. A few issues uncovered there were fixed  
/ enhanced in this release. See the CHANGELOG for full details.

You can read all about his exercise, starting at  
[Ackbar, KirbyBase, and Rails | Is your house on fire, Clark?](http://houseonfire.wordpress.com/2006/02/18/hello-world/).

= 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](http://ackbar.rubyforge.org)  
KirbyBase: [netpromi.com](http://www.netpromi.com/kirbybase_ruby.html)  
Rails: [http://www.rubyonrails.com](http://www.rubyonrails.com)  
Pimki: [http://pimki.rubyforge.org](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](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
