class Protein::Client

Public Class Methods

call(request) click to toggle source
# File lib/protein/client.rb, line 33
def call(request)
  service_class = router.resolve_by_request(request)

  raise(ArgumentError, "called to non-responding service") unless service_class.response?

  service_name = service_class.service_name
  request_class = service_class.request_class
  request_buf = request_class.encode(request)
  request_payload = Payload::Request.encode(service_name, request_buf)

  response_payload = transport_class.call(request_payload)
  response_buf, errors = Payload::Response.decode(response_payload)
  service_instance = service_class.new(request)

  if response_buf
    response = service_class.response_class.decode(response_buf)
    service_instance.resolve(response)
  elsif errors
    service_instance.reject(errors)
  end

  service_instance
end
call!(request) click to toggle source
# File lib/protein/client.rb, line 57
def call!(request)
  service_instance = call(request)
  if service_instance.failure?
    raise(CallError, service_instance.errors)
  end

  service_instance.response
end
proto(proto) click to toggle source
# File lib/protein/client.rb, line 13
def proto(proto)
  service = Class.new(Service)
  service.proto(proto)

  @router ||= Class.new(Router)
  @router.service(service)
end
push(request) click to toggle source
# File lib/protein/client.rb, line 66
def push(request)
  service_class = router.resolve_by_request(request)

  raise(ArgumentError, "pushed to responding service") if service_class.response?

  service_name = service_class.service_name
  request_class = service_class.request_class
  request_buf = request_class.encode(request)
  request_payload = Payload::Request.encode(service_name, request_buf)

  transport_class.push(request_payload)

  nil
end
route(router) click to toggle source
# File lib/protein/client.rb, line 4
def route(router)
  @router = Router.define(router)
end
router() click to toggle source
# File lib/protein/client.rb, line 21
def router
  GetConst.call(@router)
end
service(service) click to toggle source
# File lib/protein/client.rb, line 8
def service(service)
  @router ||= Class.new(Router)
  @router.service(service)
end
transport(transport, opts = {}) click to toggle source
# File lib/protein/client.rb, line 25
def transport(transport, opts = {})
  @transport_class = Transport.define(transport, opts)
end
transport_class() click to toggle source
# File lib/protein/client.rb, line 29
def transport_class
  GetConst.call(@transport_class)
end