class Protobuf::Rpc::Middleware::RequestDecoder

Attributes

app[R]
env[R]

Public Class Methods

new(app) click to toggle source
# File lib/protobuf/rpc/middleware/request_decoder.rb, line 9
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/protobuf/rpc/middleware/request_decoder.rb, line 13
def call(env)
  @env = env

  env.service_name = service_name
  env.method_name = method_name
  env.request = request
  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
log_signature() click to toggle source
Calls superclass method Protobuf::Logging#log_signature
# File lib/protobuf/rpc/middleware/request_decoder.rb, line 29
def log_signature
  env.log_signature || super
end

Private Instance Methods

method_name() click to toggle source
# File lib/protobuf/rpc/middleware/request_decoder.rb, line 35
def method_name
  @method_name ||= begin
    method_name = request_wrapper.method_name.underscore.to_sym

    unless service.rpc_method?(method_name)
      fail MethodNotFound, "#{service.name}##{method_name} is not a defined RPC method."
    end

    method_name
  end
end
request() click to toggle source
# File lib/protobuf/rpc/middleware/request_decoder.rb, line 47
def request
  @request ||= begin
    data = request_wrapper.request_proto
    rpc_method.request_type.decode(data)
  end
rescue => exception
  raise BadRequestData, "Unable to decode request: #{exception.message}"
end
request_wrapper() click to toggle source

Decode the incoming request object into our expected request object

# File lib/protobuf/rpc/middleware/request_decoder.rb, line 58
def request_wrapper
  @request_wrapper ||= begin
    logger.debug { sign_message("Decoding request: #{env.encoded_request}") }
    Socketrpc::Request.decode(env.encoded_request)
  end
rescue => exception
  raise BadRequestData, "Unable to decode request: #{exception.message}"
end
rpc_method() click to toggle source
# File lib/protobuf/rpc/middleware/request_decoder.rb, line 67
def rpc_method
  @rpc_method ||= service.rpcs[method_name]
end
service() click to toggle source
# File lib/protobuf/rpc/middleware/request_decoder.rb, line 71
def service
  @service ||= service_name.constantize
rescue NameError
  raise ServiceNotFound, "Service class #{service_name} is not defined."
end
service_name() click to toggle source
# File lib/protobuf/rpc/middleware/request_decoder.rb, line 77
def service_name
  @service_name ||= request_wrapper.service_name
end