split out common read/write code
[metropolis.git] / lib / metropolis.rb
blob96a2a6d1bf51d4d39180cd60a92e86e0ce01833f
1 # -*- encoding: binary -*-
2 require 'rack'
3 require 'uri'
5 module Metropolis
6   autoload :TC, 'metropolis/tc'
8   def self.new(opts = {})
9     opts = opts.dup
10     rv = Object.new
11     uri = URI.parse(opts[:uri])
12     case uri.scheme
13     when 'tc'
14       opts[:path_pattern] = uri.path
15       opts[:query] = Rack::Utils.parse_query(uri.query) if uri.query
16       case ext = File.extname(uri.path)
17       when '.tch'
18         rv.extend Metropolis::TC::HDB
19       else
20         raise ArgumentError, "unsupported suffix: #{ext}"
21       end
22     else
23       raise ArgumentError, "unsupported URI scheme: #{uri.scheme}"
24     end
25     rv.setup(opts)
26     rv
27   end
28 end
30 require 'metropolis/common'