Class: BladeRunner::RackAdapter

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/blade_runner/rack_adapter.rb

Constant Summary collapse

PATH =
"/blade_runner"
ADAPTER_PATH =
PATH + "/adapter"
WEBSOCKET_PATH =
PATH + "/websocket"

Instance Method Summary collapse

Constructor Details

#initialize(app = nil, options = {}) ⇒ RackAdapter

Returns a new instance of RackAdapter.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/blade_runner/rack_adapter.rb', line 9

def initialize(app = nil, options = {})
  BR.initialize!

  if app.is_a?(Hash)
    @options = app
  else
    @app, @options = app, options
  end

  @mount_path = @options[:mount]
  @mount_path_pattern = /^#{@mount_path}/

  @blade_runner_path_pattern = /^#{PATH}/
  @adapter_path_pattern = /^#{ADAPTER_PATH}/
  @websocket_path_pattern = /^#{WEBSOCKET_PATH}/
end

Instance Method Details

#call(env) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/blade_runner/rack_adapter.rb', line 26

def call(env)
  unless @mount_path.nil?
    if env["PATH_INFO"] =~ @mount_path_pattern
      env["PATH_INFO"].sub!(@mount_path_pattern, "")
    elsif @app
      return @app.call(env)
    end
  end

  case env["PATH_INFO"]
  when ""
    add_forward_slash(env)
  when "/"
    env["PATH_INFO"] = "index.html"
    response = environment(:blade_runner).call(env)
    response_with_session(response, env)
  when @websocket_path_pattern
    bayeux.call(env)
  when @adapter_path_pattern
    env["PATH_INFO"].sub!(@adapter_path_pattern, "")
    environment(:adapter).call(env)
  when @blade_runner_path_pattern
    env["PATH_INFO"].sub!(@blade_runner_path_pattern, "")
    environment(:blade_runner).call(env)
  else
    environment(:user).call(env)
  end
end