Rails plugin to allow easy use of tokyo cabinet within rails.
Ruby
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
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 ;)