tcp-client 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30592a849daf948c39b138e5f2d634761d59328f7a6eab11d45a9b069b8a747d
4
- data.tar.gz: 39d0b9afe676700627a9b671c974ab5465cdb72e5ed6ec5c009add638a2b02b3
3
+ metadata.gz: 582575d6b5a66a264900141fd5010a1a80a363e15d0ca369f262889d99d932d0
4
+ data.tar.gz: a0c2335a50addbf5f424d869cd2931256a1334a0a075530ef3873d9065246834
5
5
  SHA512:
6
- metadata.gz: d6a44381c618b1a89128499f7256bd9559dd4ea1efc5f34b82b681cfcca29f1c51b7ab47b13b513977e3276e298ec5ad02f6619f5ed36320f724e9cd192f925e
7
- data.tar.gz: dfbcb8fb0e4b77770023023afbaee354e71ba4e41fe89daff9e197ce7d7a8a785e7891dbb4801651ae4702b56324d3431695e27acc781fafae9e7336db6c2c52
6
+ metadata.gz: b160bd656c4f6091a669cf65349e54aeaa2e7c057e0a5a3c896edf5e8ab91166a3a5cdafedfe84e4b04d5a79e0602fb2433c6ff9144e6881746f3607b8d8290b
7
+ data.tar.gz: 6726ebdfbc777258e62b3d915fa7e4a57f7ae514d6259ce5f0051ee649294142acf09faac490901e32083072d7a68dd4ce71fa697e0bf05c0d9556c0d57bb6a5
@@ -83,23 +83,23 @@ class TCPClient
83
83
  end
84
84
 
85
85
  def timeout_error=(exception)
86
- raise(NotAnException, exception) unless exception_class?(exception)
86
+ raise(NotAnExceptionError, exception) unless exception_class?(exception)
87
87
  @connect_timeout_error =
88
88
  @read_timeout_error = @write_timeout_error = exception
89
89
  end
90
90
 
91
91
  def connect_timeout_error=(exception)
92
- raise(NotAnException, exception) unless exception_class?(exception)
92
+ raise(NotAnExceptionError, exception) unless exception_class?(exception)
93
93
  @connect_timeout_error = exception
94
94
  end
95
95
 
96
96
  def read_timeout_error=(exception)
97
- raise(NotAnException, exception) unless exception_class?(exception)
97
+ raise(NotAnExceptionError, exception) unless exception_class?(exception)
98
98
  @read_timeout_error = exception
99
99
  end
100
100
 
101
101
  def write_timeout_error=(exception)
102
- raise(NotAnException, exception) unless exception_class?(exception)
102
+ raise(NotAnExceptionError, exception) unless exception_class?(exception)
103
103
  @write_timeout_error = exception
104
104
  end
105
105
 
@@ -136,7 +136,7 @@ class TCPClient
136
136
  def set(attribute, value)
137
137
  public_send("#{attribute}=", value)
138
138
  rescue NoMethodError
139
- raise(UnknownAttribute, attribute)
139
+ raise(UnknownAttributeError, attribute)
140
140
  end
141
141
 
142
142
  def seconds(value)
@@ -1,37 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TCPClient
4
- class NoOpenSSL < RuntimeError
4
+ class NoOpenSSLError < RuntimeError
5
5
  def initialize
6
6
  super('OpenSSL is not available')
7
7
  end
8
8
  end
9
9
 
10
- class NoBlockGiven < ArgumentError
10
+ class NoBlockGivenError < ArgumentError
11
11
  def initialize
12
12
  super('no block given')
13
13
  end
14
14
  end
15
15
 
16
- class InvalidDeadLine < ArgumentError
16
+ class InvalidDeadLineError < ArgumentError
17
17
  def initialize(timeout)
18
18
  super("invalid deadline - #{timeout}")
19
19
  end
20
20
  end
21
21
 
22
- class UnknownAttribute < ArgumentError
22
+ class UnknownAttributeError < ArgumentError
23
23
  def initialize(attribute)
24
24
  super("unknown attribute - #{attribute}")
25
25
  end
26
26
  end
27
27
 
28
- class NotAnException < TypeError
28
+ class NotAnExceptionError < TypeError
29
29
  def initialize(object)
30
30
  super("exception class required - #{object.inspect}")
31
31
  end
32
32
  end
33
33
 
34
- class NotConnected < IOError
34
+ class NotConnectedError < IOError
35
35
  def initialize
36
36
  super('client not connected')
37
37
  end
@@ -65,6 +65,18 @@ class TCPClient
65
65
  end
66
66
  end
67
67
 
68
- Timeout = TimeoutError # backward compatibility
69
- deprecate_constant(:Timeout)
68
+ NoOpenSSL = NoOpenSSLError
69
+ NoBlockGiven = NoBlockGivenError
70
+ InvalidDeadLine = InvalidDeadLineError
71
+ UnknownAttribute = UnknownAttributeError
72
+ NotAnException = NotAnExceptionError
73
+ NotConnected = NotConnectedError
74
+ deprecate_constant(
75
+ :NoOpenSSL,
76
+ :NoBlockGiven,
77
+ :InvalidDeadLine,
78
+ :UnknownAttribute,
79
+ :NotAnException,
80
+ :NotConnected
81
+ )
70
82
  end
@@ -5,6 +5,8 @@ module IOWithDeadlineMixin
5
5
  methods = mod.instance_methods
6
6
  if methods.index(:wait_writable) && methods.index(:wait_readable)
7
7
  mod.include(ViaWaitMethod)
8
+ elsif methods.index(:to_io)
9
+ mod.include(ViaIOWaitMethod)
8
10
  else
9
11
  mod.include(ViaSelect)
10
12
  end
@@ -66,6 +68,25 @@ module IOWithDeadlineMixin
66
68
  end
67
69
  end
68
70
 
71
+ module ViaIOWaitMethod
72
+ private def with_deadline(deadline, exception)
73
+ loop do
74
+ case ret = yield
75
+ when :wait_writable
76
+ remaining_time = deadline.remaining_time or raise(exception)
77
+ raise(exception) if to_io.wait_writable(remaining_time).nil?
78
+ when :wait_readable
79
+ remaining_time = deadline.remaining_time or raise(exception)
80
+ raise(exception) if to_io.wait_readable(remaining_time).nil?
81
+ else
82
+ return ret
83
+ end
84
+ end
85
+ rescue Errno::ETIMEDOUT
86
+ raise(exception)
87
+ end
88
+ end
89
+
69
90
  module ViaSelect
70
91
  private def with_deadline(deadline, exception)
71
92
  loop do
@@ -85,5 +106,5 @@ module IOWithDeadlineMixin
85
106
  end
86
107
  end
87
108
 
88
- private_constant(:ViaWaitMethod, :ViaSelect)
109
+ private_constant(:ViaWaitMethod, :ViaIOWaitMethod, :ViaSelect)
89
110
  end
@@ -33,7 +33,8 @@ class TCPClient
33
33
  end
34
34
 
35
35
  def should_verify?(ssl_params)
36
- ssl_params[:verify_mode] != OpenSSL::SSL::VERIFY_NONE
36
+ ssl_params[:verify_mode] != OpenSSL::SSL::VERIFY_NONE &&
37
+ context.verify_hostname
37
38
  end
38
39
  end
39
40
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TCPClient
4
- VERSION = '0.6.0'
4
+ VERSION = '0.7.0'
5
5
  end
data/lib/tcp-client.rb CHANGED
@@ -24,7 +24,7 @@ class TCPClient
24
24
  configuration = Configuration.default
25
25
  )
26
26
  client = nil
27
- raise(NoBlockGiven) unless block_given?
27
+ raise(NoBlockGivenError) unless block_given?
28
28
  address = Address.new(address)
29
29
  client = new
30
30
  client.with_deadline(timeout) do
@@ -46,7 +46,7 @@ class TCPClient
46
46
 
47
47
  def connect(address, configuration, timeout: nil, exception: nil)
48
48
  close if @socket
49
- raise(NoOpenSSL) if configuration.ssl? && !defined?(SSLSocket)
49
+ raise(NoOpenSSLError) if configuration.ssl? && !defined?(SSLSocket)
50
50
  @address = Address.new(address)
51
51
  @configuration = configuration.dup.freeze
52
52
  @socket = create_socket(timeout, exception)
@@ -68,16 +68,16 @@ class TCPClient
68
68
 
69
69
  def with_deadline(timeout)
70
70
  previous_deadline = @deadline
71
- raise(NoBlockGiven) unless block_given?
71
+ raise(NoBlockGivenError) unless block_given?
72
72
  @deadline = Deadline.new(timeout)
73
- raise(InvalidDeadLine, timeout) unless @deadline.valid?
73
+ raise(InvalidDeadLineError, timeout) unless @deadline.valid?
74
74
  yield(self)
75
75
  ensure
76
76
  @deadline = previous_deadline
77
77
  end
78
78
 
79
79
  def read(nbytes = nil, timeout: nil, exception: nil)
80
- raise(NotConnected) if closed?
80
+ raise(NotConnectedError) if closed?
81
81
  deadline = create_deadline(timeout, configuration.read_timeout)
82
82
  return @socket.read(nbytes) unless deadline.valid?
83
83
  exception ||= configuration.read_timeout_error
@@ -85,7 +85,7 @@ class TCPClient
85
85
  end
86
86
 
87
87
  def write(*msg, timeout: nil, exception: nil)
88
- raise(NotConnected) if closed?
88
+ raise(NotConnectedError) if closed?
89
89
  deadline = create_deadline(timeout, configuration.write_timeout)
90
90
  return @socket.write(*msg) unless deadline.valid?
91
91
  exception ||= configuration.write_timeout_error
@@ -25,8 +25,10 @@ class TCPClientTest < Test
25
25
  assert_equal('', subject.to_s)
26
26
  assert_nil(subject.address)
27
27
  subject.close
28
- assert_raises(TCPClient::NotConnected) { subject.write('hello world!') }
29
- assert_raises(TCPClient::NotConnected) { subject.read(42) }
28
+ assert_raises(TCPClient::NotConnectedError) do
29
+ subject.write('hello world!')
30
+ end
31
+ assert_raises(TCPClient::NotConnectedError) { subject.read(42) }
30
32
  end
31
33
 
32
34
  def create_nonconnected_client
@@ -46,8 +48,10 @@ class TCPClientTest < Test
46
48
  assert_equal('localhost', subject.address.hostname)
47
49
  assert_instance_of(Addrinfo, subject.address.addrinfo)
48
50
  assert_same(0, subject.address.addrinfo.ip_port)
49
- assert_raises(TCPClient::NotConnected) { subject.write('hello world!') }
50
- assert_raises(TCPClient::NotConnected) { subject.read(42) }
51
+ assert_raises(TCPClient::NotConnectedError) do
52
+ subject.write('hello world!')
53
+ end
54
+ assert_raises(TCPClient::NotConnectedError) { subject.read(42) }
51
55
  end
52
56
 
53
57
  def test_connected_state
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.6.0
4
+ version: 0.7.0
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-10-16 00:00:00.000000000 Z
11
+ date: 2021-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler