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