Class: Rack::DriverSelect

Inherits:
Object
  • Object
show all
Defined in:
lib/sinatra/rack_driver_select.rb

Constant Summary collapse

HEADER_TO_ENV_MAP =
{
  'HTTP_X_DELTACLOUD_DRIVER' => :driver,
  'HTTP_X_DELTACLOUD_PROVIDER' => :provider
}

Instance Method Summary collapse

Constructor Details

#initialize(app, opts = {}) ⇒ DriverSelect

Returns a new instance of DriverSelect.



20
21
22
23
# File 'lib/sinatra/rack_driver_select.rb', line 20

def initialize(app, opts={})
  @app = app
  @opts = opts
end

Instance Method Details

#call(env) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/sinatra/rack_driver_select.rb', line 30

def call(env)
  original_settings = { }
  req = Rack::Request.new(env)
  if req.params['api'] and req.params['api']['driver']
    env['HTTP_X_DELTACLOUD_DRIVER'] = req.params['api']['driver']
  end
  if req.params['api'] and req.params['api']['provider']
    env['HTTP_X_DELTACLOUD_PROVIDER'] = req.params['api']['provider']
  end
  HEADER_TO_ENV_MAP.each do |header, name|
    original_settings[name] = Thread.current[name]
    new_setting = extract_header(env, header)
    Thread.current[name] = new_setting if new_setting
  end

  @app.call(env)
ensure
  original_settings.each { |name, value| Thread.current[name] = value }
end

#extract_header(env, header) ⇒ Object



50
51
52
# File 'lib/sinatra/rack_driver_select.rb', line 50

def extract_header(env, header)
  env[header].downcase if env[header]
end