Parent

Rack::Recursive

Rack::Recursive allows applications called down the chain to include data from other applications (by using rack['rack.recursive.include'][...] or raise a ForwardRequest to redirect internally.

Public Class Methods

new(app) click to toggle source
# File lib/rack/recursive.rb, line 33
def initialize(app)
  @app = app
end

Public Instance Methods

_call(env) click to toggle source
# File lib/rack/recursive.rb, line 41
def _call(env)
  @script_name = env["SCRIPT_NAME"]
  @app.call(env.merge('rack.recursive.include' => method(:include)))
rescue ForwardRequest => req
  call(env.merge(req.env))
end
call(env) click to toggle source
# File lib/rack/recursive.rb, line 37
def call(env)
  dup._call(env)
end
include(env, path) click to toggle source
# File lib/rack/recursive.rb, line 48
def include(env, path)
  unless path.index(@script_name) == 0 && (path[@script_name.size] == // ||
                                           path[@script_name.size].nil?)
    raise ArgumentError, "can only include below #{@script_name}, not #{path}"
  end

  env = env.merge("PATH_INFO" => path, "SCRIPT_NAME" => @script_name,
                  "REQUEST_METHOD" => "GET",
                  "CONTENT_LENGTH" => "0", "CONTENT_TYPE" => "",
                  "rack.input" => StringIO.new(""))
  @app.call(env)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.