From 5eb8bf5e005d0d800af0c7e5e2dfd6b2526dd218 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 22 Nov 2010 15:36:54 -0800 Subject: initial TokyoCabinet hash database support Basically working, for now --- lib/metropolis.rb | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 lib/metropolis.rb (limited to 'lib/metropolis.rb') diff --git a/lib/metropolis.rb b/lib/metropolis.rb new file mode 100644 index 0000000..987040d --- /dev/null +++ b/lib/metropolis.rb @@ -0,0 +1,28 @@ +# -*- encoding: binary -*- +require 'rack' +require 'uri' + +module Metropolis + autoload :TokyoCabinet, 'metropolis/tokyocabinet' + + def self.new(opts = {}) + opts = opts.dup + rv = Object.new + uri = URI.parse(opts[:uri]) + case uri.scheme + when 'tc' + opts[:path_pattern] = uri.path + opts[:query] = Rack::Utils.parse_query(uri.query) if uri.query + case ext = File.extname(uri.path) + when '.tch' + rv.extend Metropolis::TokyoCabinet::HDB + else + raise ArgumentError, "unsupported suffix: #{ext}" + end + else + raise ArgumentError, "unsupported URI scheme: #{uri.scheme}" + end + rv.setup(opts) + rv + end +end -- cgit v1.2.3-24-ge0c7