tcp-client 0.9.3 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75811fed2b0735c2cac6a4e9671e138df88e6b8ada2be03a0d86b4b83b37b863
4
- data.tar.gz: 9c715081912711178a0038d9af9832cf6c45e2620c2cff6dad899565de86be02
3
+ metadata.gz: 114da301d59fc9cf9c3d3bda508f4d23b5b4991877a5dc7504d4da97114f8e7f
4
+ data.tar.gz: 9d0815501de340b485cba157aff05097597948d023a7eca6c45a8ead3a4e3d0d
5
5
  SHA512:
6
- metadata.gz: d2842f5bd4fa2806c15bb94d6c1da9a897be40959a5db9033f404f1c980648a997daee0d49ad1fb75e4cf680644f72dfb04e880eb0c9e9ba9207d6ee3dd75240
7
- data.tar.gz: 174878bab1414b1ef49bd67a1f296d21e463bd7d817442340192aace8af88e56d941b647ad43ff0ed5126e2c2ab16e0159c0467dd7a08289d93c423ca520e2cb
6
+ metadata.gz: a560644d578cedccaf1e2665f518b3a6a4e225886cfc561a8b62087420d93b958ee4741d8efde3b456fa15ce24fd5ee2f6a1121b55855205ffae5abf17becf97
7
+ data.tar.gz: f1f0ed0b87f8ee9c9b376b6b567c45aecb204c5b3de044c97f6ba080071c3c8e70da8bca8cca2484d5ddec06df181ee4b007e9ed826045e205d77df38eefbbbd
@@ -62,19 +62,28 @@ class TCPClient
62
62
  @addrinfo.freeze
63
63
  end
64
64
 
65
+ #
66
+ # @attribute [r] port
67
+ # @return [Integer] the port number
68
+ #
69
+ def port
70
+ @addrinfo.ip_port
71
+ end
72
+
65
73
  #
66
74
  # @return [String] text representation of self as "host:port"
67
75
  #
68
76
  def to_s
69
- return "[#{@hostname}]:#{@addrinfo.ip_port}" if @hostname.index(':') # IP6
70
- "#{@hostname}:#{@addrinfo.ip_port}"
77
+ hostname.index(':') ? "[#{hostname}]:#{port}" : "#{hostname}:#{port}"
71
78
  end
72
79
 
73
80
  #
74
- # @return [Hash] containing the host and port
81
+ # Convert `self` to a Hash containing host and port attribute.
82
+ #
83
+ # @return [Hash] host and port
75
84
  #
76
85
  def to_h
77
- { host: @hostname, port: @addrinfo.ip_port }
86
+ { host: hostname, port: port }
78
87
  end
79
88
 
80
89
  # @!visibility private
@@ -96,7 +105,7 @@ class TCPClient
96
105
  end
97
106
 
98
107
  def init_from_addrinfo(addrinfo)
99
- @hostname, _port = addrinfo.getnameinfo(Socket::NI_NUMERICSERV)
108
+ @hostname = addrinfo.getnameinfo(Socket::NI_NUMERICSERV).first
100
109
  @addrinfo = addrinfo
101
110
  end
102
111
 
@@ -109,7 +118,7 @@ class TCPClient
109
118
  def from_string(str)
110
119
  idx = str.rindex(':') or return nil, str.to_i
111
120
  name = str[0, idx].delete_prefix('[').delete_suffix(']')
112
- [name, str[idx + 1, str.size - idx].to_i]
121
+ [name.empty? ? nil : name, str[idx + 1, str.size - idx].to_i]
113
122
  end
114
123
  end
115
124
  end
@@ -6,24 +6,14 @@ class TCPClient
6
6
  #
7
7
  # A Configuration is used to configure the behavior of a {TCPClient} instance.
8
8
  #
9
- # It allows to specify to monitor timeout, how to handle exceptions, if SSL
9
+ # It allows to specify the monitor timeout, how to handle exceptions, if SSL
10
10
  # should be used and to setup the underlying Socket.
11
11
  #
12
12
  class Configuration
13
13
  #
14
- # @overload create(options)
15
- # Shorthand to create a new configuration with given options.
16
- #
17
- # @example
18
- # config = TCPClient::Configuration.create(buffered: false)
19
- #
20
- # @param options [Hash] see {#initialize} for details
21
- #
22
- # @return [Configuration] the initialized configuration
23
- #
24
- # @overload create(&block)
25
- # Shorthand to create a new configuration within a code block.
14
+ # Shorthand to create a new configuration.
26
15
  #
16
+ # @overload create()
27
17
  # @example
28
18
  # config = TCPClient::Configuration.create do |cfg|
29
19
  # cfg.buffered = false
@@ -32,7 +22,13 @@ class TCPClient
32
22
  #
33
23
  # @yieldparam configuration {Configuration}
34
24
  #
35
- # @return [Configuration] the initialized configuration
25
+ # @overload create(options)
26
+ # @example
27
+ # config = TCPClient::Configuration.create(buffered: false)
28
+ #
29
+ # @param options [Hash<Symbol,Object>] see {#initialize} for details
30
+ #
31
+ # @return [Configuration] the initialized configuration
36
32
  #
37
33
  def self.create(options = {})
38
34
  configuration = new(options)
@@ -43,18 +39,19 @@ class TCPClient
43
39
  #
44
40
  # Intializes the instance with given options.
45
41
  #
46
- # @param options [Hash]
42
+ # @param options [Hash<Symbol,Object>]
47
43
  # @option options [Boolean] :buffered, see {#buffered}
48
44
  # @option options [Boolean] :keep_alive, see {#keep_alive}
49
45
  # @option options [Boolean] :reverse_lookup, see {#reverse_lookup}
50
46
  # @option options [Hash<Symbol, Object>] :ssl_params, see {#ssl_params}
51
47
  # @option options [Numeric] :connect_timeout, see {#connect_timeout}
52
- # @option options [Exception] :connect_timeout_error, see
48
+ # @option options [Class<Exception>] :connect_timeout_error, see
53
49
  # {#connect_timeout_error}
54
50
  # @option options [Numeric] :read_timeout, see {#read_timeout}
55
- # @option options [Exception] :read_timeout_error, see {#read_timeout_error}
51
+ # @option options [Class<Exception>] :read_timeout_error, see
52
+ # {#read_timeout_error}
56
53
  # @option options [Numeric] :write_timeout, see {#write_timeout}
57
- # @option options [Exception] :write_timeout_error, see
54
+ # @option options [Class<Exception>] :write_timeout_error, see
58
55
  # {#write_timeout_error}
59
56
  # @option options [Boolean] :normalize_network_errors, see
60
57
  # {#normalize_network_errors}
@@ -75,9 +72,8 @@ class TCPClient
75
72
  #
76
73
  # Enables/disables use of Socket-level buffering
77
74
  #
78
- # @return [true] if the connection is allowed to use internal buffers
79
- # (default)
80
- # @return [false] if buffering is not allowed
75
+ # @return [Boolean] wheter the connection is allowed to use internal buffers
76
+ # (default) or not
81
77
  #
82
78
  attr_reader :buffered
83
79
 
@@ -88,9 +84,8 @@ class TCPClient
88
84
  #
89
85
  # Enables/disables use of Socket-level keep alive handling.
90
86
  #
91
- # @return [true] if the connection is allowed to use keep alive signals
92
- # (default)
93
- # @return [false] if the connection should not check keep alive
87
+ # @return [Boolean] wheter the connection is allowed to use keep alive
88
+ # signals (default) or not
94
89
  #
95
90
  attr_reader :keep_alive
96
91
 
@@ -101,9 +96,8 @@ class TCPClient
101
96
  #
102
97
  # Enables/disables address lookup.
103
98
  #
104
- # @return [true] if the connection is allowed to lookup the address
105
- # (default)
106
- # @return [false] if the address lookup is not required
99
+ # @return [Boolean] wheter the connection is allowed to lookup the address
100
+ # (default) or not
107
101
  #
108
102
  attr_reader :reverse_lookup
109
103
 
@@ -120,7 +114,8 @@ class TCPClient
120
114
  end
121
115
 
122
116
  #
123
- # Parameters used to initialize a SSL context.
117
+ # Parameters used to initialize a SSL context. SSL/TLS will only be used if
118
+ # this attribute is not `nil`.
124
119
  #
125
120
  # @return [Hash<Symbol, Object>] SSL parameters for the SSL context
126
121
  # @return [nil] if no SSL should be used (default)
@@ -161,7 +156,7 @@ class TCPClient
161
156
  # The exception class which will be raised if {TCPClient#connect} can not
162
157
  # be finished in time.
163
158
  #
164
- # @return [Class] exception class raised
159
+ # @return [Class<Exception>] exception class raised
165
160
  # @raise [NotAnExceptionError] if given argument is not an Exception class
166
161
  #
167
162
  attr_reader :connect_timeout_error
@@ -189,7 +184,7 @@ class TCPClient
189
184
  # The exception class which will be raised if {TCPClient#read} can not be
190
185
  # finished in time.
191
186
  #
192
- # @return [Class] exception class raised
187
+ # @return [Class<Exception>] exception class raised
193
188
  # @raise [NotAnExceptionError] if given argument is not an Exception class
194
189
  #
195
190
  attr_reader :read_timeout_error
@@ -217,7 +212,7 @@ class TCPClient
217
212
  # The exception class which will be raised if {TCPClient#write} can not be
218
213
  # finished in time.
219
214
  #
220
- # @return [Class] exception class raised
215
+ # @return [Class<Exception>] exception class raised
221
216
  # @raise [NotAnExceptionError] if given argument is not an Exception class
222
217
  #
223
218
  attr_reader :write_timeout_error
@@ -244,9 +239,10 @@ class TCPClient
244
239
 
245
240
  #
246
241
  # @attribute [w] timeout_error
247
- # Shorthand to set the exception class wich will by raised by any timeout.
242
+ # Shorthand to set the exception class wich will by raised by any reached
243
+ # timeout.
248
244
  #
249
- # @return [Class] exception class raised
245
+ # @return [Class<Exception>] exception class raised
250
246
  #
251
247
  # @raise [NotAnExceptionError] if given argument is not an Exception class
252
248
  #
@@ -270,9 +266,8 @@ class TCPClient
270
266
  # manner. If this option is set to true all these error cases are raised as
271
267
  # {NetworkError} and can be easily captured.
272
268
  #
273
- # @return [true] if all network exceptions should be raised as
274
- # {NetworkError}
275
- # @return [false] if socket/system errors should not be normalzed (default)
269
+ # @return [Boolean] wheter all network exceptions should be raised as
270
+ # {NetworkError}, or not (default)
276
271
  #
277
272
  attr_reader :normalize_network_errors
278
273
 
@@ -2,8 +2,6 @@
2
2
 
3
3
  class TCPClient
4
4
  class Deadline
5
- MONOTONIC = defined?(Process::CLOCK_MONOTONIC) ? true : false
6
-
7
5
  def initialize(timeout)
8
6
  timeout = timeout&.to_f
9
7
  @deadline = timeout&.positive? ? now + timeout : 0
@@ -19,7 +17,7 @@ class TCPClient
19
17
 
20
18
  private
21
19
 
22
- if MONOTONIC
20
+ if defined?(Process::CLOCK_MONOTONIC)
23
21
  def now
24
22
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
25
23
  end
@@ -2,7 +2,8 @@
2
2
 
3
3
  class TCPClient
4
4
  #
5
- # Raised when a SSL connection should be establshed but the OpenSSL gem is not available.
5
+ # Raised when a SSL connection should be establshed but the OpenSSL gem is
6
+ # not available.
6
7
  #
7
8
  class NoOpenSSLError < RuntimeError
8
9
  def initialize
@@ -11,7 +12,8 @@ class TCPClient
11
12
  end
12
13
 
13
14
  #
14
- # Raised when a method requires a callback block but no such block is specified.
15
+ # Raised when a method requires a callback block but no such block is
16
+ # specified.
15
17
  #
16
18
  class NoBlockGivenError < ArgumentError
17
19
  def initialize
@@ -58,15 +60,18 @@ class TCPClient
58
60
  #
59
61
  # Base exception class for all network related errors.
60
62
  #
61
- # Will be raised for any system level network error when {Configuration.normalize_network_errors} is configured.
63
+ # Will be raised for any system level network error when
64
+ # {Configuration.normalize_network_errors} is configured.
62
65
  #
63
- # You should catch this exception class when you like to handle any relevant {TCPClient} error.
66
+ # You should catch this exception class when you like to handle any relevant
67
+ # {TCPClient} error.
64
68
  #
65
69
  class NetworkError < StandardError
66
70
  end
67
71
 
68
72
  #
69
- # Raised when a {TCPClient} instance should read/write from/to the network but is not connected.
73
+ # Raised when a {TCPClient} instance should read/write from/to the network
74
+ # but is not connected.
70
75
  #
71
76
  class NotConnectedError < NetworkError
72
77
  def initialize
@@ -77,7 +82,8 @@ class TCPClient
77
82
  #
78
83
  # Base exception class for a detected timeout.
79
84
  #
80
- # You should catch this exception class when you like to handle any timeout error.
85
+ # You should catch this exception class when you like to handle any timeout
86
+ # error.
81
87
  #
82
88
  class TimeoutError < NetworkError
83
89
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TCPClient
4
- VERSION = '0.9.3'
4
+ VERSION = '0.9.4'
5
5
  end
data/lib/tcp-client.rb CHANGED
@@ -30,6 +30,14 @@ class TCPClient
30
30
  #
31
31
  # If no `configuration` is given, the {.default_configuration} will be used.
32
32
  #
33
+ # @overload open(address, configuration = nil)
34
+ # @yieldparam client [TCPClient] the connected client
35
+ #
36
+ # @return [Object] the block result
37
+ #
38
+ # @overload open(address, configuration = nil)
39
+ # @return [TCPClient] the connected client
40
+ #
33
41
  # If an optional block is given, then the block's result is returned and the
34
42
  # connection will be closed when the block execution ends.
35
43
  # This can be used to create an ad-hoc connection which is garanteed to be
@@ -38,15 +46,10 @@ class TCPClient
38
46
  # If no block is giiven the connected client instance is returned.
39
47
  # This can be used as a shorthand to create & connect a client.
40
48
  #
41
- # @param address [Address, String, Addrinfo, Integer] the address to connect
42
- # to, see {Address#initialize} for valid formats
49
+ # @param address [Address, String, Addrinfo, Integer] the target address see
50
+ # {Address#initialize} for valid formats
43
51
  # @param configuration [Configuration] the {Configuration} to be used for
44
- # this instance
45
- #
46
- # @yieldparam client [TCPClient] the connected client
47
- # @yieldreturn [Object] any result
48
- #
49
- # @return [Object, TCPClient] the block result or the connected client
52
+ # the new instance
50
53
  #
51
54
  # @see #connect
52
55
  #
@@ -59,8 +62,8 @@ class TCPClient
59
62
  end
60
63
 
61
64
  #
62
- # Yields a new instance which is connected to the server on the given
63
- # `address`.It limits all {#read} and {#write} actions within the block to
65
+ # Yields an instance which is connected to the server on the given
66
+ # `address`. It limits all {#read} and {#write} actions within the block to
64
67
  # the given time.
65
68
  #
66
69
  # It ensures to close the connection when the block execution ends and returns
@@ -68,19 +71,18 @@ class TCPClient
68
71
  #
69
72
  # This can be used to create an ad-hoc connection which is garanteed to be
70
73
  # closed and which {#read}/{#write} call sequence should not last longer than
71
- # the `timeout`.
74
+ # the `timeout` seconds.
72
75
  #
73
76
  # If no `configuration` is given, the {.default_configuration} will be used.
74
77
  #
75
78
  # @param timeout [Numeric] maximum time in seconds for all {#read} and
76
79
  # {#write} calls within the block
77
- # @param address [Address, String, Addrinfo, Integer] the address to connect
78
- # to, see {Address#initialize} for valid formats
80
+ # @param address [Address, String, Addrinfo, Integer] the target address see
81
+ # {Address#initialize} for valid formats
79
82
  # @param configuration [Configuration] the {Configuration} to be used for
80
- # this instance
83
+ # the instance
81
84
  #
82
85
  # @yieldparam client [TCPClient] the connected client
83
- # @yieldreturn [Object] any result
84
86
  #
85
87
  # @return [Object] the block's result
86
88
  #
@@ -110,7 +112,7 @@ class TCPClient
110
112
 
111
113
  #
112
114
  # @!parse attr_reader :closed?
113
- # @return [Boolean] true when the connection is closed, false when connected
115
+ # @return [Boolean] wheter the connection is closed
114
116
  #
115
117
  def closed?
116
118
  @socket.nil? || @socket.closed?
@@ -133,21 +135,19 @@ class TCPClient
133
135
  #
134
136
  # Establishes a new connection to a given `address`.
135
137
  #
136
- # It accepts a connection-specific configuration or uses the
137
- # {.default_configuration}. The {#configuration} used by this instance will
138
- # be a copy of the configuration used for this method call. This allows to
139
- # configure the behavior per connection.
138
+ # It accepts a connection-specific `configuration` or uses the
139
+ # {.default_configuration}.
140
140
  #
141
141
  # The optional `timeout` and `exception` parameters allow to override the
142
142
  # `connect_timeout` and `connect_timeout_error` values.
143
143
  #
144
- # @param address [Address, String, Addrinfo, Integer] the address to connect
145
- # to, see {Address#initialize} for valid formats
144
+ # @param address [Address, String, Addrinfo, Integer] the target address see
145
+ # {Address#initialize} for valid formats
146
146
  # @param configuration [Configuration] the {Configuration} to be used for
147
147
  # this instance
148
148
  # @param timeout [Numeric] maximum time in seconds to connect
149
- # @param exception [Class] exception class to be used when the connect timeout
150
- # reached
149
+ # @param exception [Class<Exception>] exception class to be used when the
150
+ # connect timeout reached
151
151
  #
152
152
  # @return [self]
153
153
  #
@@ -165,7 +165,7 @@ class TCPClient
165
165
  end
166
166
 
167
167
  #
168
- # Flush all internal buffers (write all through).
168
+ # Flushes all internal buffers (write all through).
169
169
  #
170
170
  # @return [self]
171
171
  #
@@ -182,8 +182,8 @@ class TCPClient
182
182
  #
183
183
  # @param nbytes [Integer] the number of bytes to read
184
184
  # @param timeout [Numeric] maximum time in seconds to read
185
- # @param exception [Class] exception class to be used when the read timeout
186
- # reached
185
+ # @param exception [Class<Exception>] exception class to be used when the
186
+ # read timeout reached
187
187
  #
188
188
  # @return [String] the read buffer
189
189
  #
@@ -211,7 +211,7 @@ class TCPClient
211
211
  end
212
212
 
213
213
  #
214
- # Execute a block with a given overall time limit.
214
+ # Executes a block with a given overall time limit.
215
215
  #
216
216
  # When you like to ensure that a complete {#read}/{#write} communication
217
217
  # sequence with the server is finished before a given amount of time you use
@@ -228,7 +228,6 @@ class TCPClient
228
228
  # {#write} calls within the block
229
229
  #
230
230
  # @yieldparam client [TCPClient] self
231
- # @yieldreturn [Object] any result
232
231
  #
233
232
  # @return [Object] the block`s result
234
233
  #
@@ -245,16 +244,16 @@ class TCPClient
245
244
  end
246
245
 
247
246
  #
248
- # Write the given `messages` to the server.
247
+ # Writes the given `messages` to the server.
249
248
  #
250
249
  # The optional `timeout` and `exception` parameters allow to override the
251
250
  # `write_timeout` and `write_timeout_error` values of the used
252
251
  # {#configuration}.
253
252
  #
254
- # @param messages [String] one or more messages to write
253
+ # @param messages [Array<String>] one or more messages to write
255
254
  # @param timeout [Numeric] maximum time in seconds to write
256
- # @param exception [Class] exception class to be used when the write timeout
257
- # reached
255
+ # @param exception [Class<Exception>] exception class to be used when the
256
+ # write timeout reached
258
257
  #
259
258
  # @return [Integer] bytes written
260
259
  #
@@ -9,8 +9,8 @@ RSpec.describe TCPClient::Address do
9
9
 
10
10
  it 'points to the given port on localhost' do
11
11
  expect(address.hostname).to eq 'localhost'
12
+ expect(address.port).to be 42
12
13
  expect(address.to_s).to eq 'localhost:42'
13
- expect(address.addrinfo.ip_port).to be 42
14
14
  end
15
15
 
16
16
  it 'uses IPv6' do
@@ -29,8 +29,9 @@ RSpec.describe TCPClient::Address do
29
29
  end
30
30
 
31
31
  it 'points to the given host and port' do
32
- expect(address.hostname).to eq addrinfo.getnameinfo[0]
33
- expect(address.addrinfo.ip_port).to be 42
32
+ expect(address.hostname).to eq 'localhost'
33
+ expect(address.port).to be 42
34
+ expect(address.to_s).to eq 'localhost:42'
34
35
  end
35
36
 
36
37
  it 'uses IPv6' do
@@ -46,30 +47,21 @@ RSpec.describe TCPClient::Address do
46
47
 
47
48
  it 'points to the given host and port' do
48
49
  expect(address.hostname).to eq 'localhost'
50
+ expect(address.port).to be 42
49
51
  expect(address.to_s).to eq 'localhost:42'
50
- expect(address.addrinfo.ip_port).to be 42
51
- end
52
-
53
- it 'uses IPv6' do
54
52
  expect(address.addrinfo.ip?).to be true
55
- expect(address.addrinfo.ipv6?).to be true
56
- expect(address.addrinfo.ipv4?).to be false
57
53
  end
54
+
58
55
  end
59
56
 
60
57
  context 'when only a port is provided' do
61
- subject(:address) { TCPClient::Address.new(':21') }
58
+ subject(:address) { TCPClient::Address.new(':42') }
62
59
 
63
60
  it 'points to the given port on localhost' do
64
- expect(address.hostname).to eq ''
65
- expect(address.to_s).to eq ':21'
66
- expect(address.addrinfo.ip_port).to be 21
67
- end
68
-
69
- it 'uses IPv4' do
61
+ expect(address.hostname).to eq 'localhost'
62
+ expect(address.port).to be 42
63
+ expect(address.to_s).to eq 'localhost:42'
70
64
  expect(address.addrinfo.ip?).to be true
71
- expect(address.addrinfo.ipv6?).to be false
72
- expect(address.addrinfo.ipv4?).to be true
73
65
  end
74
66
  end
75
67
 
@@ -78,14 +70,9 @@ RSpec.describe TCPClient::Address do
78
70
 
79
71
  it 'points to the given port on localhost' do
80
72
  expect(address.hostname).to eq '::1'
73
+ expect(address.port).to be 42
81
74
  expect(address.to_s).to eq '[::1]:42'
82
- expect(address.addrinfo.ip_port).to be 42
83
- end
84
-
85
- it 'uses IPv6' do
86
75
  expect(address.addrinfo.ip?).to be true
87
- expect(address.addrinfo.ipv6?).to be true
88
- expect(address.addrinfo.ipv4?).to be false
89
76
  end
90
77
  end
91
78
  end
@@ -108,13 +95,13 @@ RSpec.describe TCPClient::Address do
108
95
  expect(address_a).to eq address_b
109
96
  end
110
97
 
111
- context 'using the == opperator' do
98
+ context 'using the == operator' do
112
99
  it 'compares to equal' do
113
100
  expect(address_a == address_b).to be true
114
101
  end
115
102
  end
116
103
 
117
- context 'using the === opperator' do
104
+ context 'using the === operator' do
118
105
  it 'compares to equal' do
119
106
  expect(address_a === address_b).to be true
120
107
  end
@@ -129,13 +116,13 @@ RSpec.describe TCPClient::Address do
129
116
  expect(address_a).not_to eq address_b
130
117
  end
131
118
 
132
- context 'using the == opperator' do
119
+ context 'using the == operator' do
133
120
  it 'compares not to equal' do
134
121
  expect(address_a == address_b).to be false
135
122
  end
136
123
  end
137
124
 
138
- context 'using the === opperator' do
125
+ context 'using the === operator' do
139
126
  it 'compares not to equal' do
140
127
  expect(address_a === address_b).to be false
141
128
  end
@@ -233,13 +233,13 @@ RSpec.describe TCPClient::Configuration do
233
233
  expect(config_a).to eq config_b
234
234
  end
235
235
 
236
- context 'using the == opperator' do
236
+ context 'using the == operator' do
237
237
  it 'compares to equal' do
238
238
  expect(config_a == config_b).to be true
239
239
  end
240
240
  end
241
241
 
242
- context 'using the === opperator' do
242
+ context 'using the === operator' do
243
243
  it 'compares to equal' do
244
244
  expect(config_a === config_b).to be true
245
245
  end
@@ -254,13 +254,13 @@ RSpec.describe TCPClient::Configuration do
254
254
  expect(config_a).not_to eq config_b
255
255
  end
256
256
 
257
- context 'using the == opperator' do
257
+ context 'using the == operator' do
258
258
  it 'compares not to equal' do
259
259
  expect(config_a == config_b).to be false
260
260
  end
261
261
  end
262
262
 
263
- context 'using the === opperator' do
263
+ context 'using the === operator' do
264
264
  it 'compares not to equal' do
265
265
  expect(config_a === config_b).to be false
266
266
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tcp-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Blumtritt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-07 00:00:00.000000000 Z
11
+ date: 2021-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler