allow easier, single-file options for TC and TDB
[metropolis.git] / lib / metropolis.rb
blobc38d4af6ce9b6500a4f248bd2b11cc473d881116
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 = URI.parse(opts[:uri])
17     rv.instance_eval do
18       @uri = uri
19       @query = @uri.query ? Rack::Utils.parse_query(@uri.query) : nil
20       @path_pattern = opts[:path_pattern]
21       @path = @uri.path if @uri.path != '/'
22     end
24     base = case uri.scheme
25     when 'hash' then Metropolis::Hash
26     when 'tdb' then Metropolis::TDB
27     when 'tc' then Metropolis::TC
28     else
29       raise ArgumentError, "unsupported URI scheme: #{uri.scheme}"
30     end
31     rv.extend(base)
32     rv.setup(opts)
33     rv
34   end
35 end
37 require 'metropolis/common'