net-protocol 0.1.2 → 0.2.1

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: d8e88ea7a722bbf9b9d0f2fa612bfde5c5208878e180f5a26516b1df9b034f17
4
- data.tar.gz: 9062b0fea9900d450c8b2384ba2bdc3a56296b3e77a8cf32a5eae11ce5af782f
3
+ metadata.gz: dddd9155f88e3e664a77ae33aed748ce833c114871dfab60e2be632214a2e063
4
+ data.tar.gz: 45ea621c80a7cef086d1094502c47aa60c0320ab585a8dd0e9c4684de2be5608
5
5
  SHA512:
6
- metadata.gz: 8206f5d99416bbd72b390819fe5193dddde16b6b0d4f5bfa7fa99fc6d99ed79f1c5e2dab0da13009d27087d483d13e92d48a92ca4db853f1f531a0f884afdad9
7
- data.tar.gz: b9881f6507c2f67f24bc60034397644745e090194a5443093a9f655008bd4db8281e6a49bf76aea135b12bb534bc230866aef80c784a67e72cd024567dcfdee3
6
+ metadata.gz: fa55cb8a2eb4d6a14815dc9367c5787aea13ce9f6127298aa41614ffdf1ac4b421a4d6e6da2ad40740c99ec6a18b7541fd9e194f2bfd3e093e1223683fa8e34d
7
+ data.tar.gz: e77247d5a85f3adcf618f47b8cf3ef9b0be28f6b988ae48de43c17796d9d6c2bff6fdb083784c636f6a122c4bfaddde722fefa28f46837bc4f8358f2a63c41f2
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: 'github-actions'
4
+ directory: '/'
5
+ schedule:
6
+ interval: 'weekly'
@@ -7,16 +7,15 @@ jobs:
7
7
  name: build (${{ matrix.ruby }} / ${{ matrix.os }})
8
8
  strategy:
9
9
  matrix:
10
- ruby: [ '3.0', 2.7, 2.6, 2.5, 2.4, head ]
10
+ ruby: [ head, '3.1', '3.0', '2.7', '2.6' ]
11
11
  os: [ ubuntu-latest, macos-latest ]
12
12
  runs-on: ${{ matrix.os }}
13
13
  steps:
14
- - uses: actions/checkout@v2
14
+ - uses: actions/checkout@v3
15
15
  - name: Set up Ruby
16
16
  uses: ruby/setup-ruby@v1
17
17
  with:
18
18
  ruby-version: ${{ matrix.ruby }}
19
- - name: Install dependencies
20
- run: bundle install
19
+ bundler-cache: true # 'bundle install' and cache gems
21
20
  - name: Run test
22
- run: rake test
21
+ run: bundle exec rake test
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Net::Protocol
2
2
 
3
- The abstruct interface for net-* client.
3
+ The abstract interface for net-* client.
4
4
 
5
5
  ## Installation
6
6
 
data/lib/net/protocol.rb CHANGED
@@ -26,7 +26,7 @@ require 'io/wait'
26
26
  module Net # :nodoc:
27
27
 
28
28
  class Protocol #:nodoc: internal use only
29
- VERSION = "0.1.2"
29
+ VERSION = "0.2.1"
30
30
 
31
31
  private
32
32
  def Protocol.protocol_param(name, val)
@@ -120,6 +120,8 @@ module Net # :nodoc:
120
120
  @continue_timeout = continue_timeout
121
121
  @debug_output = debug_output
122
122
  @rbuf = ''.b
123
+ @rbuf_empty = true
124
+ @rbuf_offset = 0
123
125
  end
124
126
 
125
127
  attr_reader :io
@@ -154,14 +156,15 @@ module Net # :nodoc:
154
156
  LOG "reading #{len} bytes..."
155
157
  read_bytes = 0
156
158
  begin
157
- while read_bytes + @rbuf.size < len
158
- s = rbuf_consume(@rbuf.size)
159
- read_bytes += s.size
160
- dest << s
159
+ while read_bytes + rbuf_size < len
160
+ if s = rbuf_consume_all
161
+ read_bytes += s.bytesize
162
+ dest << s
163
+ end
161
164
  rbuf_fill
162
165
  end
163
166
  s = rbuf_consume(len - read_bytes)
164
- read_bytes += s.size
167
+ read_bytes += s.bytesize
165
168
  dest << s
166
169
  rescue EOFError
167
170
  raise unless ignore_eof
@@ -175,9 +178,10 @@ module Net # :nodoc:
175
178
  read_bytes = 0
176
179
  begin
177
180
  while true
178
- s = rbuf_consume(@rbuf.size)
179
- read_bytes += s.size
180
- dest << s
181
+ if s = rbuf_consume_all
182
+ read_bytes += s.bytesize
183
+ dest << s
184
+ end
181
185
  rbuf_fill
182
186
  end
183
187
  rescue EOFError
@@ -188,14 +192,16 @@ module Net # :nodoc:
188
192
  end
189
193
 
190
194
  def readuntil(terminator, ignore_eof = false)
195
+ offset = @rbuf_offset
191
196
  begin
192
- until idx = @rbuf.index(terminator)
197
+ until idx = @rbuf.index(terminator, offset)
198
+ offset = @rbuf.bytesize
193
199
  rbuf_fill
194
200
  end
195
- return rbuf_consume(idx + terminator.size)
201
+ return rbuf_consume(idx + terminator.bytesize - @rbuf_offset)
196
202
  rescue EOFError
197
203
  raise unless ignore_eof
198
- return rbuf_consume(@rbuf.size)
204
+ return rbuf_consume
199
205
  end
200
206
  end
201
207
 
@@ -208,12 +214,16 @@ module Net # :nodoc:
208
214
  BUFSIZE = 1024 * 16
209
215
 
210
216
  def rbuf_fill
211
- tmp = @rbuf.empty? ? @rbuf : nil
217
+ tmp = @rbuf_empty ? @rbuf : nil
212
218
  case rv = @io.read_nonblock(BUFSIZE, tmp, exception: false)
213
219
  when String
214
- return if rv.equal?(tmp)
215
- @rbuf << rv
216
- rv.clear
220
+ @rbuf_empty = false
221
+ if rv.equal?(tmp)
222
+ @rbuf_offset = 0
223
+ else
224
+ @rbuf << rv
225
+ rv.clear
226
+ end
217
227
  return
218
228
  when :wait_readable
219
229
  (io = @io.to_io).wait_readable(@read_timeout) or raise Net::ReadTimeout.new(io)
@@ -228,13 +238,40 @@ module Net # :nodoc:
228
238
  end while true
229
239
  end
230
240
 
231
- def rbuf_consume(len)
232
- if len == @rbuf.size
241
+ def rbuf_flush
242
+ if @rbuf_empty
243
+ @rbuf.clear
244
+ @rbuf_offset = 0
245
+ end
246
+ nil
247
+ end
248
+
249
+ def rbuf_size
250
+ @rbuf.bytesize - @rbuf_offset
251
+ end
252
+
253
+ def rbuf_consume_all
254
+ rbuf_consume if rbuf_size > 0
255
+ end
256
+
257
+ def rbuf_consume(len = nil)
258
+ if @rbuf_offset == 0 && (len.nil? || len == @rbuf.bytesize)
233
259
  s = @rbuf
234
260
  @rbuf = ''.b
261
+ @rbuf_offset = 0
262
+ @rbuf_empty = true
263
+ elsif len.nil?
264
+ s = @rbuf.byteslice(@rbuf_offset..-1)
265
+ @rbuf = ''.b
266
+ @rbuf_offset = 0
267
+ @rbuf_empty = true
235
268
  else
236
- s = @rbuf.slice!(0, len)
269
+ s = @rbuf.byteslice(@rbuf_offset, len)
270
+ @rbuf_offset += len
271
+ @rbuf_empty = @rbuf_offset == @rbuf.bytesize
272
+ rbuf_flush
237
273
  end
274
+
238
275
  @debug_output << %Q[-> #{s.dump}\n] if @debug_output
239
276
  s
240
277
  end
data/net-protocol.gemspec CHANGED
@@ -13,10 +13,10 @@ Gem::Specification.new do |spec|
13
13
  spec.authors = ["Yukihiro Matsumoto"]
14
14
  spec.email = ["matz@ruby-lang.org"]
15
15
 
16
- spec.summary = %q{The abstruct interface for net-* client.}
17
- spec.description = %q{The abstruct interface for net-* client.}
16
+ spec.summary = %q{The abstract interface for net-* client.}
17
+ spec.description = %q{The abstract interface for net-* client.}
18
18
  spec.homepage = "https://github.com/ruby/net-protocol"
19
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
19
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
20
20
  spec.licenses = ["Ruby", "BSD-2-Clause"]
21
21
 
22
22
  spec.metadata["homepage_uri"] = spec.homepage
@@ -27,10 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
28
28
  `git ls-files -z 2>/dev/null`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
29
29
  end
30
- spec.bindir = "exe"
31
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
30
  spec.require_paths = ["lib"]
33
31
 
34
32
  spec.add_dependency "timeout"
35
- spec.add_dependency "io-wait"
36
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-protocol
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yukihiro Matsumoto
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-21 00:00:00.000000000 Z
11
+ date: 2022-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: timeout
@@ -24,31 +24,17 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: io-wait
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- description: The abstruct interface for net-* client.
27
+ description: The abstract interface for net-* client.
42
28
  email:
43
29
  - matz@ruby-lang.org
44
30
  executables: []
45
31
  extensions: []
46
32
  extra_rdoc_files: []
47
33
  files:
34
+ - ".github/dependabot.yml"
48
35
  - ".github/workflows/test.yml"
49
36
  - ".gitignore"
50
37
  - Gemfile
51
- - Gemfile.lock
52
38
  - LICENSE.txt
53
39
  - README.md
54
40
  - Rakefile
@@ -71,15 +57,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
71
57
  requirements:
72
58
  - - ">="
73
59
  - !ruby/object:Gem::Version
74
- version: 2.3.0
60
+ version: 2.6.0
75
61
  required_rubygems_version: !ruby/object:Gem::Requirement
76
62
  requirements:
77
63
  - - ">="
78
64
  - !ruby/object:Gem::Version
79
65
  version: '0'
80
66
  requirements: []
81
- rubygems_version: 3.3.0.dev
67
+ rubygems_version: 3.4.0.dev
82
68
  signing_key:
83
69
  specification_version: 4
84
- summary: The abstruct interface for net-* client.
70
+ summary: The abstract interface for net-* client.
85
71
  test_files: []
data/Gemfile.lock DELETED
@@ -1,23 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- net-protocol (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- power_assert (1.1.5)
10
- rake (12.3.3)
11
- test-unit (3.3.5)
12
- power_assert
13
-
14
- PLATFORMS
15
- ruby
16
-
17
- DEPENDENCIES
18
- net-protocol!
19
- rake
20
- test-unit
21
-
22
- BUNDLED WITH
23
- 2.1.4