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.



79
80
81
82
83
# File 'lib/utopia/middleware/requester.rb', line 79

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

Instance Attribute Details

#envObject

Returns the value of attribute env.



85
86
87
# File 'lib/utopia/middleware/requester.rb', line 85

def env
  @env
end

Class Method Details

.[](env) ⇒ Object



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

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

Instance Method Details

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



110
111
112
113
114
115
116
# File 'lib/utopia/middleware/requester.rb', line 110

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

#call(env) ⇒ Object



87
88
89
90
91
92
93
94
# File 'lib/utopia/middleware/requester.rb', line 87

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

	@app.call(env)
end

#inspectObject

Avoid a huge amount of junk being printed when inspecting env.



119
120
121
# File 'lib/utopia/middleware/requester.rb', line 119

def inspect
	to_s
end

#request(env) ⇒ Object



99
100
101
102
103
104
105
106
107
108
# File 'lib/utopia/middleware/requester.rb', line 99

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