diff --git a/src/ruby/lib/grpc/generic/client_stub.rb b/src/ruby/lib/grpc/generic/client_stub.rb index f234984eec3a4f4bde3d0d7cfe5528e56c1fcd65..fc9c7a2b5262f8a8b633c38045338b3fa3a262b3 100644 --- a/src/ruby/lib/grpc/generic/client_stub.rb +++ b/src/ruby/lib/grpc/generic/client_stub.rb @@ -39,6 +39,25 @@ module GRPC # Default deadline is 5 seconds. DEFAULT_DEADLINE = 5 + # setup_channel is used by #initialize to constuct a channel from its + # arguments. + def self.setup_channel(alt_chan, host, creds, **kw) + unless alt_chan.nil? + fail(TypeError, '!Channel') unless alt_chan.is_a?(Core::Channel) + return alt_chan + end + return Core::Channel.new(host, kw) if creds.nil? + fail(TypeError, '!Credentials') unless creds.is_a?(Core::Credentials) + Core::Channel.new(host, kw, creds) + end + + # check_update_metadata is used by #initialize verify that it's a Proc. + def self.check_update_metadata(update_metadata) + return update_metadata if update_metadata.nil? + fail(TypeError, '!is_a?Proc') unless update_metadata.is_a?(Proc) + update_metadata + end + # Creates a new ClientStub. # # Minimally, a stub is created with the just the host of the gRPC service @@ -73,39 +92,15 @@ module GRPC # @param update_metadata a func that updates metadata as described above # @param kw [KeywordArgs]the channel arguments def initialize(host, q, - channel_override:nil, + channel_override: nil, deadline: DEFAULT_DEADLINE, creds: nil, update_metadata: nil, **kw) - unless q.is_a? Core::CompletionQueue - fail(ArgumentError, 'not a CompletionQueue') - end + fail(TypeError, '!CompletionQueue') unless q.is_a?(Core::CompletionQueue) @queue = q - - # set the channel instance - if !channel_override.nil? - ch = channel_override - fail(ArgumentError, 'not a Channel') unless ch.is_a? Core::Channel - else - if creds.nil? - ch = Core::Channel.new(host, kw) - elsif !creds.is_a?(Core::Credentials) - fail(ArgumentError, 'not a Credentials') - else - ch = Core::Channel.new(host, kw, creds) - end - end - @ch = ch - - @update_metadata = nil - unless update_metadata.nil? - unless update_metadata.is_a? Proc - fail(ArgumentError, 'update_metadata is not a Proc') - end - @update_metadata = update_metadata - end - + @ch = ClientStub.setup_channel(channel_override, host, creds, **kw) + @update_metadata = ClientStub.check_update_metadata(update_metadata) @host = host @deadline = deadline end