about summary refs log tree commit
path: root/lib/metropolis.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-11-22 15:36:54 -0800
committerEric Wong <normalperson@yhbt.net>2010-11-22 19:56:05 -0800
commit5eb8bf5e005d0d800af0c7e5e2dfd6b2526dd218 (patch)
treee1665fd589f13174a6ff0919946cc96e9308772d /lib/metropolis.rb
downloadmetropolis-5eb8bf5e005d0d800af0c7e5e2dfd6b2526dd218.tar.gz
initial TokyoCabinet hash database support
Basically working, for now
Diffstat (limited to 'lib/metropolis.rb')
-rw-r--r--lib/metropolis.rb28
1 files changed, 28 insertions, 0 deletions
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