Class: Gruf::Client
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Gruf::Client
- Includes:
- Loggable
- Defined in:
- lib/gruf/client.rb,
lib/gruf/client/error.rb,
lib/gruf/client/error_factory.rb
Overview
Abstracts out the calling interface for interacting with gRPC clients. Streamlines calling and provides instrumented response objects that also can contain deserialized error messages via serialized objects transported via the service’s trailing metadata.
begin
client = ::Gruf::Client.new(service: ::Demo::ThingService)
response = client.call(:GetMyThing, id: 123)
puts response..inspect
rescue Gruf::Client::Error => e
puts e.error.inspect
end
Utilizes SimpleDelegator to wrap the given service that the client is connecting to, which allows a clean interface to the underlying RPC descriptors and methods.
Direct Known Subclasses
Defined Under Namespace
Modules: Errors Classes: Error, ErrorFactory
Instance Attribute Summary collapse
-
#base_klass ⇒ Class
readonly
The base, friendly name of the service being requested.
-
#opts ⇒ Hash
readonly
A hash of options for the client.
-
#service_klass ⇒ Class
readonly
The class name of the gRPC service being requested.
Instance Method Summary collapse
-
#call(request_method, params = {}, metadata = {}, opts = {}, &block) ⇒ Gruf::Response
Call the client’s method with given params.
-
#initialize(service:, options: {}, client_options: {}) ⇒ Client
constructor
Initialize the client and setup the stub.
-
#timeout ⇒ Integer|NilClass
Returns the currently set timeout on the client stub.
Methods included from Loggable
Constructor Details
#initialize(service:, options: {}, client_options: {}) ⇒ Client
Initialize the client and setup the stub
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/gruf/client.rb', line 55 def initialize(service:, options: {}, client_options: {}) @base_klass = service @service_klass = "#{base_klass}::Service".constantize @opts = || {} @opts[:password] = .fetch(:password, '').to_s @opts[:hostname] = .fetch(:hostname, Gruf.default_client_host) @error_factory = Gruf::Client::ErrorFactory.new [:timeout] = [:timeout].to_i if .key?(:timeout) client = "#{service}::Stub".constantize.new(@opts[:hostname], build_ssl_credentials, ) super(client) end |
Instance Attribute Details
#base_klass ⇒ Class (readonly)
Returns The base, friendly name of the service being requested.
40 41 42 |
# File 'lib/gruf/client.rb', line 40 def base_klass @base_klass end |
#opts ⇒ Hash (readonly)
Returns A hash of options for the client.
44 45 46 |
# File 'lib/gruf/client.rb', line 44 def opts @opts end |
#service_klass ⇒ Class (readonly)
Returns The class name of the gRPC service being requested.
42 43 44 |
# File 'lib/gruf/client.rb', line 42 def service_klass @service_klass end |
Instance Method Details
#call(request_method, params = {}, metadata = {}, opts = {}, &block) ⇒ Gruf::Response
Call the client’s method with given params
required for the given above call error type that was returned
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/gruf/client.rb', line 79 def call(request_method, params = {}, = {}, opts = {}, &block) request_method = request_method.to_sym req = streaming_request?(request_method) ? params : request_object(request_method, params) md = () call_sig = call_signature(request_method) unless call_sig raise NotImplementedError, "The method #{request_method} has not been implemented in this service." end resp, operation = execute(call_sig, req, md, opts, &block) raise @error_factory.from_exception(resp.result) unless resp.success? Gruf::Response.new(operation: operation, message: resp.result, execution_time: resp.time) end |
#timeout ⇒ Integer|NilClass
Returns the currently set timeout on the client stub
101 102 103 |
# File 'lib/gruf/client.rb', line 101 def timeout __getobj__.instance_variable_get(:@timeout) end |