httpx 0.5.0 → 0.5.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: bbd100aaeeeb3425820db41745f3dbc9ff8f4932308a4396139025818054d8a9
4
- data.tar.gz: a946a80e2e0060106799228bca3ff6b6c4a7317297758a90e65bd3599eb5cac0
3
+ metadata.gz: 8d46b9e4e151ec41d27edd3c5890081bd08f8d1106e12ed7be49432fba952e2e
4
+ data.tar.gz: b4db1fe32bf9e97171c08f8e2477adfd84b56c50d1d76f34144d7b6bc281473c
5
5
  SHA512:
6
- metadata.gz: 95d038b06bad0457f34cb39a373691b64d4c8c2b323c84005166eb22e3240133c7e4f0975e5522c5846cf6dc1959bdec798534026e550e68bc930b0a6d68aad2
7
- data.tar.gz: 5d1980dfab340b60851140f6d4976fd374ee74650f6b6e731ca4d6c16288dbcb2cf5acc956db09610e62eda33186afac0cc0b853218852074306644fd2acde7c
6
+ metadata.gz: dfa30d6432aa328391d19e4a236c962232a216d049d8b5aa5a41ae5d35f0a796b88603de96225ed88d23ed8408af355e8edaed5f07c183b50978b4f6d8570a60
7
+ data.tar.gz: e3186c27ab01a92653bb72fbd628f8b5d2738e90050d0873cac0e94767a374ba1f6bb0735a0b7391ff2343f5f53c0b1642ec8b55b77cc3c9936548065723be2a
@@ -16,8 +16,6 @@ module HTTPX
16
16
 
17
17
  def_delegator :@buffer, :bytesize
18
18
 
19
- def_delegator :@buffer, :slice!
20
-
21
19
  def_delegator :@buffer, :clear
22
20
 
23
21
  def_delegator :@buffer, :replace
@@ -32,5 +30,9 @@ module HTTPX
32
30
  def full?
33
31
  @buffer.bytesize >= @limit
34
32
  end
33
+
34
+ def shift!(fin)
35
+ @buffer = @buffer.byteslice(fin..-1)
36
+ end
35
37
  end
36
38
  end
@@ -198,7 +198,7 @@ module HTTPX
198
198
  def on_stream_close(stream, request, error)
199
199
  return handle(request, stream) if request.expects?
200
200
 
201
- if error
201
+ if error && error != :no_error
202
202
  ex = Error.new(stream.id, error)
203
203
  ex.set_backtrace(caller)
204
204
  emit(:error, request, ex)
@@ -230,7 +230,7 @@ module HTTPX
230
230
  end
231
231
 
232
232
  def on_close(_last_frame, error, _payload)
233
- if error
233
+ if error && error != :no_error
234
234
  ex = Error.new(0, error)
235
235
  ex.set_backtrace(caller)
236
236
  @streams.each_key do |request|
@@ -41,6 +41,15 @@ module HTTPX
41
41
  super
42
42
  end
43
43
 
44
+ def same_headers?(headers)
45
+ @headers.empty? || begin
46
+ headers.each do |k, v|
47
+ return false unless v == self[k]
48
+ end
49
+ true
50
+ end
51
+ end
52
+
44
53
  # merges headers with another header-quack.
45
54
  # the merge rule is, if the header already exists,
46
55
  # ignore what the +other+ headers has. Otherwise, set
@@ -87,7 +87,7 @@ module HTTPX
87
87
 
88
88
  def write(buffer)
89
89
  siz = @io.write_nonblock(buffer)
90
- buffer.slice!(0, siz)
90
+ buffer.shift!(siz)
91
91
  siz
92
92
  rescue ::IO::WaitWritable
93
93
  0
@@ -108,7 +108,7 @@ module HTTPX
108
108
  return 0 if siz == :wait_writable
109
109
  return if siz.nil?
110
110
 
111
- buffer.slice!(0, siz)
111
+ buffer.shift!(siz)
112
112
  siz
113
113
  end
114
114
  end
@@ -30,7 +30,7 @@ module HTTPX
30
30
 
31
31
  def write(buffer)
32
32
  siz = @io.send(buffer, 0, @host, @port)
33
- buffer.slice!(0, siz)
33
+ buffer.shift!(siz)
34
34
  siz
35
35
  end
36
36
 
@@ -108,10 +108,20 @@ module HTTPX
108
108
  def_option(method_name)
109
109
  end
110
110
 
111
+ REQUEST_IVARS = %i[@params @form @json @body].freeze
112
+
111
113
  def ==(other)
112
114
  ivars = instance_variables | other.instance_variables
113
115
  ivars.all? do |ivar|
114
- instance_variable_get(ivar) == other.instance_variable_get(ivar)
116
+ case ivar
117
+ when :@headers
118
+ headers = instance_variable_get(ivar)
119
+ headers.same_headers?(other.instance_variable_get(ivar))
120
+ when *REQUEST_IVARS
121
+ true
122
+ else
123
+ instance_variable_get(ivar) == other.instance_variable_get(ivar)
124
+ end
115
125
  end
116
126
  end
117
127
 
@@ -67,7 +67,8 @@ module HTTPX
67
67
  @status_code = code.to_i
68
68
  raise(Error, "wrong status code (#{@status_code})") unless (100..599).cover?(@status_code)
69
69
 
70
- @buffer.slice!(0, idx + 1)
70
+ # @buffer.slice!(0, idx + 1)
71
+ @buffer = @buffer.byteslice((idx + 1)..-1)
71
72
  nextstate(:headers)
72
73
  end
73
74
 
@@ -116,7 +117,8 @@ module HTTPX
116
117
  @observer.on_data(chunk)
117
118
  end
118
119
  elsif @content_length
119
- data = @buffer.slice!(0, @content_length)
120
+ data = @buffer.byteslice(0, @content_length)
121
+ @buffer = @buffer.byteslice(@content_length..-1) || "".b
120
122
  @content_length -= data.bytesize
121
123
  @observer.on_data(data)
122
124
  data.clear
@@ -23,6 +23,14 @@ module HTTPX
23
23
  options.merge(headers: { "accept-encoding" => Compression.registry.keys })
24
24
  end
25
25
 
26
+ module RequestMethods
27
+ def initialize(*)
28
+ super
29
+ # forego compression in the Range cases
30
+ @headers.delete("accept-encoding") if @headers.key?("range")
31
+ end
32
+ end
33
+
26
34
  module RequestBodyMethods
27
35
  def initialize(*)
28
36
  super
@@ -36,14 +44,28 @@ module HTTPX
36
44
  end
37
45
 
38
46
  module ResponseBodyMethods
47
+ attr_reader :encodings
48
+
39
49
  def initialize(*)
50
+ @encodings = []
51
+
40
52
  super
41
53
 
42
54
  return unless @headers.key?("content-encoding")
43
55
 
44
56
  @_decoders = @headers.get("content-encoding").map do |encoding|
45
- Compression.registry(encoding).decoder
57
+ decoder = Compression.registry(encoding).decoder
58
+ # do not uncompress if there is no decoder available. In fact, we can't reliably
59
+ # continue decompressing beyond that, so ignore.
60
+ break unless decoder
61
+
62
+ @encodings << encoding
63
+ decoder
46
64
  end
65
+
66
+ # remove encodings that we are able to decode
67
+ @headers["content-encoding"] = @headers.get("content-encoding") - @encodings
68
+
47
69
  @_compressed_length = if @headers.key?("content-length")
48
70
  @headers["content-length"].to_i
49
71
  else
@@ -55,6 +55,10 @@ module HTTPX
55
55
  end if @default_cookies
56
56
  store
57
57
  end
58
+
59
+ def ==(other)
60
+ @store == other.instance_variable_get(:@store)
61
+ end
58
62
  end
59
63
 
60
64
  def self.load_dependencies(*)
@@ -60,7 +60,8 @@ module HTTPX::Transcoder
60
60
  return unless index && index.positive?
61
61
 
62
62
  # Read hex-length
63
- hexlen = @buffer.slice!(0, index)
63
+ hexlen = @buffer.byteslice(0, index)
64
+ @buffer = @buffer.byteslice(index..-1) || "".b
64
65
  hexlen[/\h/] || raise(Error, "wrong chunk size line: #{hexlen}")
65
66
  @chunk_length = hexlen.hex
66
67
  # check if is last chunk
@@ -72,7 +73,7 @@ module HTTPX::Transcoder
72
73
  return if @buffer.bytesize < crlf_size
73
74
  raise Error, "wrong chunked encoding format" unless @buffer.start_with?(CRLF * (crlf_size / 2))
74
75
 
75
- @buffer.slice!(0, crlf_size)
76
+ @buffer = @buffer.byteslice(crlf_size..-1)
76
77
  if @chunk_length.nil?
77
78
  nextstate(:length)
78
79
  else
@@ -81,8 +82,10 @@ module HTTPX::Transcoder
81
82
  nextstate(:data)
82
83
  end
83
84
  when :data
84
- @chunk_buffer << (slice = @buffer.slice!(0, @chunk_length))
85
- @chunk_length -= slice.bytesize
85
+ chunk = @buffer.byteslice(0, @chunk_length)
86
+ @buffer = @buffer.byteslice(@chunk_length..-1) || "".b
87
+ @chunk_buffer << chunk
88
+ @chunk_length -= chunk.bytesize
86
89
  if @chunk_length.zero?
87
90
  yield @chunk_buffer unless @chunk_buffer.empty?
88
91
  @chunk_buffer.clear
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTTPX
4
- VERSION = "0.5.0"
4
+ VERSION = "0.5.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tiago Cardoso
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-29 00:00:00.000000000 Z
11
+ date: 2019-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http-2