Class: ActionDispatch::Routing::Redirect
- Inherits:
-
Endpoint
- Object
- Endpoint
- ActionDispatch::Routing::Redirect
show all
- Defined in:
- lib/action_dispatch/routing/redirection.rb
Overview
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Endpoint
#app, #dispatcher?, #matches?
Constructor Details
#initialize(status, block) ⇒ Redirect
Returns a new instance of Redirect.
13
14
15
16
|
# File 'lib/action_dispatch/routing/redirection.rb', line 13
def initialize(status, block)
@status = status
@block = block
end
|
Instance Attribute Details
#block ⇒ Object
Returns the value of attribute block.
11
12
13
|
# File 'lib/action_dispatch/routing/redirection.rb', line 11
def block
@block
end
|
#status ⇒ Object
Returns the value of attribute status.
11
12
13
|
# File 'lib/action_dispatch/routing/redirection.rb', line 11
def status
@status
end
|
Instance Method Details
#call(env) ⇒ Object
20
21
22
|
# File 'lib/action_dispatch/routing/redirection.rb', line 20
def call(env)
serve Request.new env
end
|
#inspect ⇒ Object
54
55
56
|
# File 'lib/action_dispatch/routing/redirection.rb', line 54
def inspect
"redirect(#{status})"
end
|
#path(params, request) ⇒ Object
50
51
52
|
# File 'lib/action_dispatch/routing/redirection.rb', line 50
def path(params, request)
block.call params, request
end
|
#redirect? ⇒ Boolean
18
|
# File 'lib/action_dispatch/routing/redirection.rb', line 18
def redirect?; true; end
|
#serve(req) ⇒ Object
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/action_dispatch/routing/redirection.rb', line 24
def serve(req)
uri = URI.parse(path(req.path_parameters, req))
unless uri.host
if relative_path?(uri.path)
uri.path = "#{req.script_name}/#{uri.path}"
elsif uri.path.empty?
uri.path = req.script_name.empty? ? "/" : req.script_name
end
end
uri.scheme ||= req.scheme
uri.host ||= req.host
uri.port ||= req.port unless req.standard_port?
body = %(<html><body>You are being <a href="#{ERB::Util.unwrapped_html_escape(uri.to_s)}">redirected</a>.</body></html>)
= {
'Location' => uri.to_s,
'Content-Type' => 'text/html',
'Content-Length' => body.length.to_s
}
[ status, , [body] ]
end
|