class Protobuf::Rpc::Middleware::ExceptionHandler
Attributes
app[R]
Public Class Methods
new(app)
click to toggle source
# File lib/protobuf/rpc/middleware/exception_handler.rb, line 9 def initialize(app) @app = app end
Public Instance Methods
_call(env)
click to toggle source
# File lib/protobuf/rpc/middleware/exception_handler.rb, line 17 def _call(env) app.call(env) rescue => exception log_exception(exception) # Rescue exceptions, re-wrap them as generic Protobuf errors, # and encode them env.response = wrap_exception(exception) env.encoded_response = wrap_and_encode_with_server(env.response, env) env end
call(env)
click to toggle source
# File lib/protobuf/rpc/middleware/exception_handler.rb, line 13 def call(env) dup._call(env) end
Private Instance Methods
wrap_and_encode_with_server(response, env)
click to toggle source
If the response is a PbError
, it won’t have the server merged into the response proto. We should add it here since exception handler is always at the bottom of the middleware stack. Without this, the server hostname in the client rpc log will not be set.
# File lib/protobuf/rpc/middleware/exception_handler.rb, line 41 def wrap_and_encode_with_server(response, env) if response.is_a?(PbError) response.encode(:server => env.server) else response.encode end end
wrap_exception(exception)
click to toggle source
Wrap exceptions in a generic Protobuf
errors unless they already are
# File lib/protobuf/rpc/middleware/exception_handler.rb, line 33 def wrap_exception(exception) exception = RpcFailed.new(exception.message) unless exception.is_a?(PbError) exception end