class Protobuf::Rpc::Middleware::RequestDecoder
def _call(env)
def _call(env) @env = env logger.debug { sign_message("Decoding request: #{env.encoded_request}") } env.service_name = service_name env.method_name = method_name env.request = request env.request_wrapper = request_wrapper env.client_host = request_wrapper.caller env.rpc_service = service env.rpc_method = rpc_method env.request_type = rpc_method.request_type env.response_type = rpc_method.response_type app.call(env) end
def call(env)
def call(env) dup._call(env) end
def initialize(app)
def initialize(app) @app = app end
def log_signature
def log_signature env.log_signature || super end
def method_name
def method_name return @method_name unless @method_name.nil? @method_name = request_wrapper.method_name.underscore.to_sym fail MethodNotFound, "#{service.name}##{@method_name} is not a defined RPC method." unless service.rpc_method?(@method_name) @method_name end
def request
def request @request ||= rpc_method.request_type.decode(request_wrapper.request_proto) rescue => exception raise BadRequestData, "Unable to decode request: #{exception.message}" end
def request_wrapper
Decode the incoming request object into our expected request object
def request_wrapper @request_wrapper ||= ::Protobuf::Socketrpc::Request.decode(env.encoded_request) rescue => exception raise BadRequestData, "Unable to decode request: #{exception.message}" end
def rpc_method
def rpc_method @rpc_method ||= service.rpcs[method_name] end
def service
def service @service ||= service_name.constantize rescue NameError raise ServiceNotFound, "Service class #{service_name} is not defined." end
def service_name
def service_name @service_name ||= request_wrapper.service_name end