add basic support for the Trivial Database (TDB)
[metropolis.git] / lib / metropolis.rb
blobe9810d74228a617d14cdf0c40e19dc70380fc959
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'
13   def self.new(opts = {})
14     opts = opts.dup
15     rv = Object.new
16     uri = opts[:uri] = URI.parse(opts[:uri])
17     case uri.scheme
18     when 'hash'
19       opts[:path] = uri.path if uri.path != '/'
20       rv.extend Metropolis::Hash
21     when 'tdb'
22       opts[:path_pattern] = uri.path
23       opts[:query] = Rack::Utils.parse_query(uri.query) if uri.query
24       rv.extend Metropolis::TDB
25     when 'tc'
26       opts[:path_pattern] = uri.path
27       opts[:query] = Rack::Utils.parse_query(uri.query) if uri.query
28       case ext = File.extname(uri.path)
29       when '.tch'
30         rv.extend Metropolis::TC::HDB
31       else
32         raise ArgumentError, "unsupported suffix: #{ext}"
33       end
34     else
35       raise ArgumentError, "unsupported URI scheme: #{uri.scheme}"
36     end
37     rv.setup(opts)
38     rv
39   end
40 end
42 require 'metropolis/common'