Cassandra Object provides a nice API for working with Cassandra. CassandraObjects are mostly duck-type compatible with ActiveRecord objects so most of your controller code should work ok. Note that they're mostly compatible, Cassandra has no support for dynamic queries, or sorting. So the following kinds of operations aren't supported and never will be.
There isn't much in the way of documentation yet, but a few examples.
class Customer < CassandraObject::Base attribute :first_name, :type => :string attribute :last_name, :type => :string attribute :date_of_birth, :type => :date attribute :signed_up_at, :type => :time_with_zone validate :should_be_cool key :uuid index :date_of_birth association :invoices, :unique=>false, :inverse_of=>:customer private def should_be_cool unless ["Michael", "Anika", "Evan", "James"].include?(first_name) errors.add(:first_name, "must be that of a cool person") end end end class Invoice < CassandraObject::Base attribute :number, :type=>:integer attribute :total, :type=>:float attribute :gst_number, :type=>:string # indexes can have a single entry also. index :number, :unique=>true # bi-directional associations with read-repair support. association :customer, :unique=>true, :inverse_of=>:invoices # Read migration support migrate 1 do |attrs| attrs["total"] ||= rand(2000) / 100.0 end migrate 2 do |attrs| attrs["gst_number"] = "66-666-666" end key :natural, :attributes => :number end @invoice = Invoice.get("12345") @invoice.customer.invoices.all.include?(@invoice) # true
How do I make this work?
Here are some basic directions:
git clone git://github.com/NZKoz/cassandra_object.git
- Run the bundler
- Make sure the tests pass
This gem is intended for Rails 3.2.0 or later. It will not work for earlier versions, and pull requests to add compatability for earlier Rails versions will not be accepted. Please another fork of this gem should you require compatability for earlier Rails versions.
Should I use this in production?
Only if you're looking to help out with the development, there are a bunch of rough edges right now.
Why do you use a superclass and not a module.
In order to facilitate testing, we have included a vendorised version of cassandra. This must be running with a valid test schema before running the tests
cd vendor/cassandra-0.7/ bin/cassandra bin/cassandra-cli -host localhost --file conf/schema-sample.txt