Class: Utopia::Middleware::Requester

Inherits:
Object
  • Object
show all
Defined in:
lib/utopia/middleware/requester.rb

Defined Under Namespace

Classes: NoRequesterError, RecursiveRequestError, Response

Constant Summary collapse

TTL_KEY =
"utopia.requestor.ttl"
REQUESTOR_KEY =
"utopia.requestor"
PATH_VARIABLES =
Set.new
MAXIMUM_DEPTH =
5

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, env = {}) ⇒ Requester

Returns a new instance of Requester.



63
64
65
66
67
# File 'lib/utopia/middleware/requester.rb', line 63

def initialize(app, env = {})
	@app = app
	@env = env
	@env[TTL_KEY] = 0
end

Instance Attribute Details

#envObject

Returns the value of attribute env.



69
70
71
# File 'lib/utopia/middleware/requester.rb', line 69

def env
  @env
end

Class Method Details

.[](env) ⇒ Object



54
55
56
57
58
59
60
61
# File 'lib/utopia/middleware/requester.rb', line 54

def self.[](env)
	requestor = env[REQUESTOR_KEY]
	if requestor
		return requestor
	else
		raise NoRequesterError
	end
end

Instance Method Details

#[](path, method = "GET", env = {}) ⇒ Object



94
95
96
97
98
99
100
# File 'lib/utopia/middleware/requester.rb', line 94

def [](path, method = "GET", env = {})
	path_env = {
		"REQUEST_METHOD" => method,
		"PATH_INFO" => path.to_s
	}
	request(env.merge(path_env))
end

#call(env) ⇒ Object



71
72
73
74
75
76
77
78
# File 'lib/utopia/middleware/requester.rb', line 71

def call(env)
	requestor = dup
	env[REQUESTOR_KEY] = requestor
	requestor.env = env.merge(@env)
	requestor.env.delete("rack.request")

	@app.call(env)
end

#request(env) ⇒ Object



83
84
85
86
87
88
89
90
91
92
# File 'lib/utopia/middleware/requester.rb', line 83

def request(env)
	env = @env.merge(env)
	env[TTL_KEY] += 1

	if env[TTL_KEY].to_i > MAXIMUM_DEPTH
		raise RecursiveRequestError, env["PATH_INFO"]
	end

	return Response.new(*@app.call(env))
end