malkomalko
3/2/2009 - 9:30 PM

gistfile1.rb

# http://tokyocabinet.sourceforge.net/spex-en.html#tctdbapi

######################################################################
# requires
######################################################################

require 'rubygems'
require 'rufus/edo'
require 'rufus/edo/ntyrant'
require 'uuid'
require 'faker'
require 'pp'
require 'activesupport'

######################################################################
# hash update to allow for hash.value access
######################################################################

class Hash
  def method_missing(key)
    self[key.to_s] || super
  end
end

######################################################################
# establish connection
######################################################################

db = Rufus::Edo::NetTyrantTable.new('127.0.0.1', 45000)

######################################################################
# creation of records
######################################################################

# users
0.times do
  db["user-" + UUID.generate] = {
    'ruby_object' => 'User',
    'name' => Faker::Name.name,
    'phone' => Faker::PhoneNumber.phone_number,
    'created_at' => "#{Time.now}",
    'updated_at' => "#{Time.now}"
  }
end

# get current user
current_user_id = db.keys(:prefix => 'user').first.to_s

# posts
0.times do
  db["post-" + UUID.generate] = {
    'ruby_object' => 'Post',
    'user_id' => current_user_id,
    'name' => "#{Faker::Lorem.words(15)}",
    'created_at' => "#{Time.now}",
    'updated_at' => "#{Time.now}"
  }
end

######################################################################
# query
######################################################################

query = db.query { |q|
  q.add 'ruby_object', :eql, 'Post' 
  q.limit 20
}

# to_xml integration
# puts query.to_a.to_xml

query.each_with_index do |r,i|
  puts "Result #{i+1}:\n\n"
  puts "Name: " + r.name + "\n" if r.has_key?('name')
  puts "Phone: " + r.phone + "\n" if r.has_key?('phone')
  puts "Created: " + r.created_at + "\n" if r.has_key?('created_at')
  puts "Updated: " + r.updated_at + "\n" if r.has_key?('updated_at')
end

######################################################################
# utility methods
######################################################################

# print out the size
# p db.size

# print out the keys
# p db.keys
# p db.keys(:prefix => 'user', :limit => 1).to_s

######################################################################
# deletion
######################################################################

# delete a record with specific key
# db.delete(key)

# delete all keys with specific prefix
# db.delete_keys_with_prefix(prefix)

# remove all records from table
# db.clear

######################################################################
# close the connection
######################################################################

db.close