# 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