mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #39917 from eileencodes/refactor-process-method
Refactor `process` method
This commit is contained in:
commit
3a1007b196
1 changed files with 59 additions and 51 deletions
|
@ -499,59 +499,11 @@ module ActionController
|
|||
parameters[:format] = format
|
||||
end
|
||||
|
||||
generated_extras = @routes.generate_extras(parameters.merge(controller: controller_class_name, action: action))
|
||||
generated_path = generated_path(generated_extras)
|
||||
query_string_keys = query_parameter_names(generated_extras)
|
||||
|
||||
@request.assign_parameters(@routes, controller_class_name, action, parameters, generated_path, query_string_keys)
|
||||
|
||||
@request.session.update(session) if session
|
||||
@request.flash.update(flash || {})
|
||||
|
||||
if xhr
|
||||
@request.set_header "HTTP_X_REQUESTED_WITH", "XMLHttpRequest"
|
||||
@request.fetch_header("HTTP_ACCEPT") do |k|
|
||||
@request.set_header k, [Mime[:js], Mime[:html], Mime[:xml], "text/xml", "*/*"].join(", ")
|
||||
end
|
||||
end
|
||||
|
||||
@request.fetch_header("SCRIPT_NAME") do |k|
|
||||
@request.set_header k, @controller.config.relative_url_root
|
||||
end
|
||||
|
||||
begin
|
||||
@controller.recycle!
|
||||
@controller.dispatch(action, @request, @response)
|
||||
ensure
|
||||
@request = @controller.request
|
||||
@response = @controller.response
|
||||
|
||||
if @request.have_cookie_jar?
|
||||
unless @request.cookie_jar.committed?
|
||||
@request.cookie_jar.write(@response)
|
||||
cookies.update(@request.cookie_jar.instance_variable_get(:@cookies))
|
||||
end
|
||||
end
|
||||
@response.prepare!
|
||||
|
||||
if flash_value = @request.flash.to_session_value
|
||||
@request.session["flash"] = flash_value
|
||||
else
|
||||
@request.session.delete("flash")
|
||||
end
|
||||
|
||||
if xhr
|
||||
@request.delete_header "HTTP_X_REQUESTED_WITH"
|
||||
@request.delete_header "HTTP_ACCEPT"
|
||||
end
|
||||
@request.query_string = ""
|
||||
|
||||
@response.sent!
|
||||
end
|
||||
|
||||
@response
|
||||
setup_request(controller_class_name, action, parameters, session, flash, xhr)
|
||||
process_controller_response(action, cookies, xhr)
|
||||
end
|
||||
|
||||
|
||||
def controller_class_name
|
||||
@controller.class.anonymous? ? "anonymous" : @controller.class.controller_path
|
||||
end
|
||||
|
@ -605,6 +557,62 @@ module ActionController
|
|||
end
|
||||
|
||||
private
|
||||
def setup_request(controller_class_name, action, parameters, session, flash, xhr)
|
||||
generated_extras = @routes.generate_extras(parameters.merge(controller: controller_class_name, action: action))
|
||||
generated_path = generated_path(generated_extras)
|
||||
query_string_keys = query_parameter_names(generated_extras)
|
||||
|
||||
@request.assign_parameters(@routes, controller_class_name, action, parameters, generated_path, query_string_keys)
|
||||
|
||||
@request.session.update(session) if session
|
||||
@request.flash.update(flash || {})
|
||||
|
||||
if xhr
|
||||
@request.set_header "HTTP_X_REQUESTED_WITH", "XMLHttpRequest"
|
||||
@request.fetch_header("HTTP_ACCEPT") do |k|
|
||||
@request.set_header k, [Mime[:js], Mime[:html], Mime[:xml], "text/xml", "*/*"].join(", ")
|
||||
end
|
||||
end
|
||||
|
||||
@request.fetch_header("SCRIPT_NAME") do |k|
|
||||
@request.set_header k, @controller.config.relative_url_root
|
||||
end
|
||||
end
|
||||
|
||||
def process_controller_response(action, cookies, xhr)
|
||||
begin
|
||||
@controller.recycle!
|
||||
@controller.dispatch(action, @request, @response)
|
||||
ensure
|
||||
@request = @controller.request
|
||||
@response = @controller.response
|
||||
|
||||
if @request.have_cookie_jar?
|
||||
unless @request.cookie_jar.committed?
|
||||
@request.cookie_jar.write(@response)
|
||||
cookies.update(@request.cookie_jar.instance_variable_get(:@cookies))
|
||||
end
|
||||
end
|
||||
@response.prepare!
|
||||
|
||||
if flash_value = @request.flash.to_session_value
|
||||
@request.session["flash"] = flash_value
|
||||
else
|
||||
@request.session.delete("flash")
|
||||
end
|
||||
|
||||
if xhr
|
||||
@request.delete_header "HTTP_X_REQUESTED_WITH"
|
||||
@request.delete_header "HTTP_ACCEPT"
|
||||
end
|
||||
@request.query_string = ""
|
||||
|
||||
@response.sent!
|
||||
end
|
||||
|
||||
@response
|
||||
end
|
||||
|
||||
def scrub_env!(env)
|
||||
env.delete_if do |k, _|
|
||||
k.start_with?("rack.request", "action_dispatch.request", "action_dispatch.rescue")
|
||||
|
|
Loading…
Reference in a new issue