Class: Net::TCPClient::Policy::Custom
- Defined in:
- lib/net/tcp_client/policy/custom.rb
Overview
Policy for connecting to servers in the order specified
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#each(&block) ⇒ Object
Calls the block once for each server, with the addresses in the order returned by the supplied block.
-
#initialize(server_names, block) ⇒ Custom
constructor
A new instance of Custom.
Methods inherited from Base
Constructor Details
#initialize(server_names, block) ⇒ Custom
Returns a new instance of Custom.
6 7 8 9 |
# File 'lib/net/tcp_client/policy/custom.rb', line 6 def initialize(server_names, block) super(server_names) @block = block end |
Instance Method Details
#each(&block) ⇒ Object
Calls the block once for each server, with the addresses in the order returned by the supplied block. The block must return a Net::TCPClient::Address instance, or nil to stop trying to connect to servers
Note:
If every address fails the block will be called constantly until it returns nil.
Example:
# Returns addresses in random order but without checking if a host name has been used before
policy.each do |addresses, count|
# Return nil after the last address has been tried so that retry logic can take over
if count <= address.size
addresses.sample
end
end
27 28 29 30 31 32 33 34 |
# File 'lib/net/tcp_client/policy/custom.rb', line 27 def each(&block) count = 1 while address = @block.call(addresses, count) raise(ArgumentError, 'Proc must return Net::TCPClient::Address, or nil') unless address.is_a?(Net::TCPClient::Address) || address.nil? block.call(address) count += 1 end end |