Rails plugin to allow easy use of tokyo cabinet within rails.
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
generators
lib
tasks
test
MIT-LICENSE
README
Rakefile
init.rb
install.rb
uninstall.rb

README

UPDATE: PLANNED REWORK
plans: to totally gut and start again looking at
- Miyazaki-resistance
- making the interfacing with rufus-tokyo much more transparent (using factory-like approach)
- looking at implementing ActionModel for Rails 3
(needs work, anyway)


Tokyo-cabinet4r
==================

Tokyo cabinet hash plugin for Rails.
Subclassing TokyoCabinet4r allows the easy creation and usage of some Tokyo Cabinet functionalities.
- Tokyo Cabinet B+ tree (http://en.wikipedia.org/wiki/B%2B_tree)
- Tokyo Cabinet table database API (freely structured documents, like other key-value stores)
(see http://tokyocabinet.sourceforge.net/index.html for more, but not implemented yet)

Install
========
Prerequisites:
Install Tokyo Cabinet (source available at http://tokyocabinet.sourceforge.net/index.html).
UPDATE: this seems to be available as a gem on github:
sudo gem install tokyocabinet-ruby

Install rufus-tokyo (github http://github.com/jmettraux/rufus-tokyo/tree/master)
sudo gem install rufus-tokyo

install as a plugin for Rails.  Tested with Rails 2.3.2
tested with Ruby 1.8.6 en 1.9.1p129

Example
=======
Btree:
------
use generator
script/generate tc_bdb phone_number

Usage:
  new key-value
  janes = PhoneNumber.new("jane","+32444888333")

  retrieve
  janes = PhoneNumber.get("jane")

  on the instance, to update:
  janes.update("+223222333444")

  delete
  janes.delete
  PhoneNumber.delete("jane")

  delete the whole table
  PhoneNumber.drop

Table in these examples is stored in RAILS_ROOT/db/tokyo/RAILS_ENV/phone_number.tcb

Table:
------
use generator
script/generate tc_tdb shortest_path

Usage:
  john = Description.new({"hair" => "black", "size" => "tall"})

  retrieve
  john = Description.get("john")

  on the instance, to update the whole record:
  john.update({"hair" => "red", "eyes" => "squinty"})

  add or update one value:
  john.add_data("eyes","blue") # record now {"hair" => "red", "eyes" => "blue"}
  john.add_data("shoe_size","42") # record now {"hair" => "red","eyes" => "blue", "shoe_size" => "42"}

  delete the record
  john.delete
  Description.delete("john")

  delete table
  Description.drop

Table in these examples is stored in RAILS_ROOT/db/tokyo/RAILS_ENV/description.tct


Todo
=====

* more elegant handling of opening and closing of file, without resorting to too much metaprogramming.
* add get_by_* name for the tables, similarly to find_by - use queries
* getters and setters for attributes of tables ?
* investigate use of Tokyo Tyrant.
* transactions
* cursors
* implement other tokyo database structures (if demand)
* explore and add extra features of the Tokyo Cabinet tables and hashes

Changes:
=======
now using rufus-tokyo (http://github.com/jmettraux/rufus-tokyo/tree/master) to allow compatibility with several Ruby implementations (thanks jmettraux !)

Copyright (c) 2009 [Elise Huard], released under the MIT license
Made in Belgium ;)