net-protocol 0.1.3 → 0.2.2

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: 426f967c28318d12339c67a1c40db52f25167a546e5760947c2f4653d946aa08
4
- data.tar.gz: 1a536d8d45be996ec1bbf72443adb8aa9aaf9951c7f70366539c836af7836dd6
3
+ metadata.gz: 7931f6f4ad36cdf9dffca852a9e6c224bb229269da14ac94b6ea06e030ad58e3
4
+ data.tar.gz: acec2eea018af73a5d7c809230a91cf2017f7486cdf96d89960c529e3956da39
5
5
  SHA512:
6
- metadata.gz: 4be52fa68351db428b2e0fadfb65965bae7c5e4b7dffda269cf9d9086d7f5ac91cb9c4a399788f6c7ed515be85ecb9c01e0feee94737b60a758c44438372d85b
7
- data.tar.gz: e282e7f623600edbe1590a390cec89f6a93f0a26226d9567decad7c0f0a890d9971fc6223b8f5698894edf493c586b2b055f67af0ea14471f7c0f5a894e04b46
6
+ metadata.gz: 0524fe9693038d5da5bd8920ab921bacf8b641301c215986bbeca494bec701cfb6e313e6abd68db520e5c763c984818f47e0cf0da2d4f4ca2b9e25a497b49bd6
7
+ data.tar.gz: aa4c7acb2896d4c2e22f23e25d4f6219c0126b110de700e6282b976edc327247f67dcf064d4d31eb9dfc084bdbca21da8802f382b72cb25971fc486d34e22368
@@ -1,17 +1,26 @@
1
- name: ubuntu
1
+ name: test
2
2
 
3
3
  on: [push, pull_request]
4
4
 
5
5
  jobs:
6
- build:
6
+ ruby-verions:
7
+ uses: ruby/actions/.github/workflows/ruby_versions.yml@master
8
+ with:
9
+ min_version: 2.6
10
+
11
+ test:
12
+ needs: ruby-verions
7
13
  name: build (${{ matrix.ruby }} / ${{ matrix.os }})
8
14
  strategy:
9
15
  matrix:
10
- ruby: [ head, '3.1', '3.0', '2.7', '2.6' ]
11
- os: [ ubuntu-latest, macos-latest ]
16
+ ruby: ${{ fromJson(needs.ruby-verions.outputs.versions) }}
17
+ os: [ ubuntu-latest, macos-latest, windows-latest ]
18
+ exclude:
19
+ - { os: windows-latest, ruby: truffleruby-head }
20
+ - { os: windows-latest, ruby: truffleruby }
12
21
  runs-on: ${{ matrix.os }}
13
22
  steps:
14
- - uses: actions/checkout@v3
23
+ - uses: actions/checkout@v4
15
24
  - name: Set up Ruby
16
25
  uses: ruby/setup-ruby@v1
17
26
  with:
data/Gemfile CHANGED
@@ -4,3 +4,4 @@ gemspec
4
4
 
5
5
  gem "rake"
6
6
  gem "test-unit"
7
+ gem "test-unit-ruby-core"
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/Rakefile CHANGED
@@ -7,11 +7,4 @@ Rake::TestTask.new(:test) do |t|
7
7
  t.test_files = FileList["test/**/test_*.rb"]
8
8
  end
9
9
 
10
- task :sync_tool do
11
- require 'fileutils'
12
- FileUtils.cp "../ruby/tool/lib/core_assertions.rb", "./test/lib"
13
- FileUtils.cp "../ruby/tool/lib/envutil.rb", "./test/lib"
14
- FileUtils.cp "../ruby/tool/lib/find_executable.rb", "./test/lib"
15
- end
16
-
17
10
  task :default => :test
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.3"
29
+ VERSION = "0.2.2"
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
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  # Specify which files should be added to the gem when it is released.
26
26
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
27
27
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
28
- `git ls-files -z 2>/dev/null`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
+ `git ls-files -z 2>#{IO::NULL}`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
29
29
  end
30
30
  spec.require_paths = ["lib"]
31
31
 
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.3
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yukihiro Matsumoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-01 00:00:00.000000000 Z
11
+ date: 2023-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: timeout
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
64
  - !ruby/object:Gem::Version
65
65
  version: '0'
66
66
  requirements: []
67
- rubygems_version: 3.4.0.dev
67
+ rubygems_version: 3.5.0.dev
68
68
  signing_key:
69
69
  specification_version: 4
70
70
  summary: The abstract interface for net-* client.