remove hard dependency on tokyocabinet
[metropolis.git] / lib / metropolis.rb
blob0af1465d9a7f2b38b605ca496fcbb30c49f071a1
1 # -*- encoding: binary -*-
2 require 'rack'
3 require 'uri'
5 module Metropolis
6   autoload :InputWrapper, 'metropolis/input_wrapper'
7   autoload :Deflate, 'metropolis/deflate'
8   autoload :Gzip, 'metropolis/gzip'
9   autoload :TC, 'metropolis/tc'
10   autoload :Hash, 'metropolis/hash'
11   autoload :TDB, 'metropolis/tdb'
12   autoload :MultiHash, 'metropolis/multi_hash'
14   def self.new(opts = {})
15     opts = opts.dup
16     rv = Object.new
17     uri = URI.parse(opts[:uri])
18     rv.instance_eval do
19       @uri = uri
20       @query = @uri.query ? Rack::Utils.parse_query(@uri.query) : nil
21       @path_pattern = opts[:path_pattern]
22       @path = @uri.path if @uri.path != '/'
23       @multi_hash = opts[:multi_hash]
24     end
26     base = case uri.scheme
27     when 'hash' then Metropolis::Hash
28     when 'tdb' then Metropolis::TDB
29     when 'tc' then Metropolis::TC
30     else
31       raise ArgumentError, "unsupported URI scheme: #{uri.scheme}"
32     end
33     rv.extend(base)
34     rv.setup(opts)
35     rv
36   end
37 end
39 require 'metropolis/common'