tcp-client 0.14.0 → 1.0.0

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: b9cfd60cce36d13e734e17197f76d5d887eae87f9b4ec08ef00a43d6ea5d8d5a
4
- data.tar.gz: ff17c9f4cb54ae7a6d00d888c34e45077b17c8225e26d1695854587ecb01f3dc
3
+ metadata.gz: 4ed9a12e8872f2399ace7bef72451c8f6b2d7821e4de069e095eb1ca7a5fcb96
4
+ data.tar.gz: 4b6b744fb885e99ea320cdfbfe21a9ff1aceaa12beedec2f2b068ceb3e932cd2
5
5
  SHA512:
6
- metadata.gz: d2c03a28cc57eba3b3468ed911ac24bb7a24279bbe80d6ddea6fca8a65848b5079c409d968599348476e041e04ff891196a90014ce5cee19e5204fdfad78ed15
7
- data.tar.gz: 68551bdbc6e978368cf615c2d68d078ceb20b8857fdd6451efba921efdf37bc25732e366d246126bb42006bffa50fa60540f30b3390f635080c99116b296f575
6
+ metadata.gz: c4e7417600e74d3709a20b20f5d13804da51d0ff85670ca8a180bd173ae7f07ea513976c2b73c3436a852b5c51a1f6c99a61f917c4be769cd73cb91f9b65684a
7
+ data.tar.gz: 197b43ef8e44faec4a6bcd397f71505b3f8f4714a3775248eeaf2984acca4444bd5f8e290cc99be9408870f4a862f1c724cfadd55c114be12a4651027f7d7fd4
@@ -7,11 +7,11 @@ rescue LoadError
7
7
  end
8
8
 
9
9
  require_relative 'deadline'
10
- require_relative 'mixin/io_with_deadline'
10
+ require_relative 'with_deadline'
11
11
 
12
12
  class TCPClient
13
13
  class SSLSocket < ::OpenSSL::SSL::SSLSocket
14
- include IOWithDeadlineMixin
14
+ include WithDeadline
15
15
 
16
16
  def initialize(socket, address, configuration, deadline, exception)
17
17
  ssl_params = Hash[configuration.ssl_params]
@@ -2,11 +2,11 @@
2
2
 
3
3
  require 'socket'
4
4
  require_relative 'deadline'
5
- require_relative 'mixin/io_with_deadline'
5
+ require_relative 'with_deadline'
6
6
 
7
7
  class TCPClient
8
8
  class TCPSocket < ::Socket
9
- include IOWithDeadlineMixin
9
+ include WithDeadline
10
10
 
11
11
  def initialize(address, configuration, deadline, exception)
12
12
  super(address.addrinfo.ipv6? ? :INET6 : :INET, :STREAM)
@@ -2,5 +2,5 @@
2
2
 
3
3
  class TCPClient
4
4
  # The current version number.
5
- VERSION = '0.14.0'
5
+ VERSION = '1.0.0'
6
6
  end
@@ -1,16 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TCPClient
4
- module IOWithDeadlineMixin
5
- class << self
6
- private
7
-
8
- def included(mod)
9
- return if defined?(mod.wait_writable) && defined?(mod.wait_readable)
10
- mod.include(defined?(mod.to_io) ? WaitWithIO : WaitWithSelect)
11
- end
12
- end
13
-
4
+ module WithDeadline
14
5
  def read_with_deadline(nbytes, deadline, exception)
15
6
  raise(exception) unless deadline.remaining_time
16
7
  return fetch_avail(deadline, exception) if nbytes.nil?
@@ -79,10 +70,10 @@ class TCPClient
79
70
  case ret = yield
80
71
  when :wait_writable
81
72
  remaining_time = deadline.remaining_time or raise(exception)
82
- wait_writable(remaining_time) or raise(exception)
73
+ wait_write[remaining_time] or raise(exception)
83
74
  when :wait_readable
84
75
  remaining_time = deadline.remaining_time or raise(exception)
85
- wait_readable(remaining_time) or raise(exception)
76
+ wait_read[remaining_time] or raise(exception)
86
77
  else
87
78
  return ret
88
79
  end
@@ -91,18 +82,28 @@ class TCPClient
91
82
  raise(exception)
92
83
  end
93
84
 
94
- module WaitWithIO
95
- def wait_writable(time) = to_io.wait_writable(time)
96
- def wait_readable(time) = to_io.wait_readable(time)
85
+ def wait_write
86
+ @wait_write ||=
87
+ if defined?(wait_writable)
88
+ ->(t) { wait_writable(t) }
89
+ elsif defined?(to_io)
90
+ ->(t) { to_io.wait_writable(t) }
91
+ else
92
+ ->(t) { ::IO.select(nil, [self], nil, t) }
93
+ end
97
94
  end
98
95
 
99
- module WaitWithSelect
100
- def wait_writable(time) = ::IO.select(nil, [self], nil, time)
101
- def wait_readable(time) = ::IO.select([self], nil, nil, time)
96
+ def wait_read
97
+ @wait_read ||=
98
+ if defined?(wait_readable)
99
+ ->(t) { wait_readable(t) }
100
+ elsif defined?(to_io)
101
+ ->(t) { to_io.wait_readable(t) }
102
+ else
103
+ ->(t) { ::IO.select([self], nil, nil, t) }
104
+ end
102
105
  end
103
-
104
- private_constant(:WaitWithIO, :WaitWithSelect)
105
106
  end
106
107
 
107
- private_constant(:IOWithDeadlineMixin)
108
+ private_constant(:WithDeadline)
108
109
  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.14.0
4
+ version: 1.0.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: 2024-03-09 00:00:00.000000000 Z
11
+ date: 2024-05-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  This gem implements a customizable TCP client class that gives you control
@@ -31,10 +31,10 @@ files:
31
31
  - lib/tcp-client/deadline.rb
32
32
  - lib/tcp-client/default_configuration.rb
33
33
  - lib/tcp-client/errors.rb
34
- - lib/tcp-client/mixin/io_with_deadline.rb
35
34
  - lib/tcp-client/ssl_socket.rb
36
35
  - lib/tcp-client/tcp_socket.rb
37
36
  - lib/tcp-client/version.rb
37
+ - lib/tcp-client/with_deadline.rb
38
38
  - lib/tcp_client.rb
39
39
  homepage: https://github.com/mblumtritt/tcp-client
40
40
  licenses:
@@ -59,7 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  requirements: []
62
- rubygems_version: 3.5.6
62
+ rubygems_version: 3.5.9
63
63
  signing_key:
64
64
  specification_version: 4
65
65
  summary: Use your TCP connections with working timeout.