lib/rack/app/endpoint/executor.rb in rack-app-6.4.1 vs lib/rack/app/endpoint/executor.rb in rack-app-6.5.0
- old
+ new
@@ -1,36 +1,24 @@
class Rack::App::Endpoint::Executor
def initialize(endpoint_properties)
@endpoint_properties = endpoint_properties
+ @catcher = Rack::App::Endpoint::Catcher.new(proc{ |env| execute(env) }, endpoint_properties)
end
def call(env)
- return catch(:rack_response){ execute(env) }.finish
+ @catcher.call(env)
end
protected
def execute(env)
- request_handler = env[Rack::App::Constants::ENV::HANDLER]
- set_response_body(request_handler, get_response_body(request_handler))
- return request_handler.response
+ resp = evaluate_value(env[Rack::App::Constants::ENV::HANDLER])
+ throw type(resp), resp
end
- def get_response_body(request_handler)
- catch :response_body do
- evaluated_value = evaluate_value(request_handler)
-
- evaluated_value
- end
- end
-
- EXTNAME = ::Rack::App::Constants::ENV::EXTNAME
-
- def set_response_body(handler, response_body)
- extname = handler.request.env[EXTNAME]
- handler.response.headers.merge!(@endpoint_properties.serializer.response_headers_for(extname))
- handler.response.write(@endpoint_properties.serializer.serialize(extname, response_body))
+ def type(resp)
+ resp.is_a?(Rack::Response) ? :rack_response : :response_body
end
def evaluate_value(request_handler)
@endpoint_properties.error_handler.execute_with_error_handling_for(request_handler) do
request_handler.instance_exec(&@endpoint_properties.callable)