http 4.4.0 → 4.4.1
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 +4 -4
- data/CHANGES.md +6 -0
- data/lib/http/response/parser.rb +20 -6
- data/lib/http/version.rb +1 -1
- data/spec/lib/http/response/parser_spec.rb +45 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cce9a8685f3b60f994e77174f79c2306f607d62016bf64b74fcebc4f86377ec0
|
4
|
+
data.tar.gz: 353702b62a1b9d3b2ea86ac5ac3ad88e9efa734c77e180128fa06c6c301895d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84ddc4cf98e603d175a9ecb8db03abd32187888070abd96a437c4121750ac2b86b6cada5d00d527b398ff4a403c2b6448d45bed61c45dbd3be8658f4ad38b121
|
7
|
+
data.tar.gz: 750edced9ae715483d750f0b18777f84a4ee24848ec761c67d2c5b89d00ebbc99fbc1e02932d3d30a33eaea43e1d081ba97bcacaf2231f6693e50d218ee24e87
|
data/CHANGES.md
CHANGED
data/lib/http/response/parser.rb
CHANGED
@@ -49,14 +49,17 @@ module HTTP
|
|
49
49
|
#
|
50
50
|
|
51
51
|
def on_header_field(_response, field)
|
52
|
-
|
52
|
+
append_header if @reading_header_value
|
53
|
+
@field << field
|
53
54
|
end
|
54
55
|
|
55
56
|
def on_header_value(_response, value)
|
56
|
-
@
|
57
|
+
@reading_header_value = true
|
58
|
+
@field_value << value
|
57
59
|
end
|
58
60
|
|
59
61
|
def on_headers_complete(_reposse)
|
62
|
+
append_header if @reading_header_value
|
60
63
|
@finished[:headers] = true
|
61
64
|
end
|
62
65
|
|
@@ -89,15 +92,26 @@ module HTTP
|
|
89
92
|
def reset
|
90
93
|
@state.reset!
|
91
94
|
|
92
|
-
@finished
|
93
|
-
@headers
|
94
|
-
@
|
95
|
-
@
|
95
|
+
@finished = Hash.new(false)
|
96
|
+
@headers = HTTP::Headers.new
|
97
|
+
@reading_header_value = false
|
98
|
+
@field = +""
|
99
|
+
@field_value = +""
|
100
|
+
@chunk = nil
|
96
101
|
end
|
97
102
|
|
98
103
|
def finished?
|
99
104
|
@finished[:message]
|
100
105
|
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def append_header
|
110
|
+
@headers.add(@field, @field_value)
|
111
|
+
@reading_header_value = false
|
112
|
+
@field_value = +""
|
113
|
+
@field = +""
|
114
|
+
end
|
101
115
|
end
|
102
116
|
end
|
103
117
|
end
|
data/lib/http/version.rb
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe HTTP::Response::Parser do
|
4
|
+
subject(:parser) { described_class.new }
|
5
|
+
let(:raw_response) do
|
6
|
+
"HTTP/1.1 200 OK\r\nContent-Length: 2\r\nContent-Type: application/json\r\nMy-Header: val\r\nEmpty-Header: \r\n\r\n{}"
|
7
|
+
end
|
8
|
+
let(:expected_headers) do
|
9
|
+
{
|
10
|
+
"Content-Length" => "2",
|
11
|
+
"Content-Type" => "application/json",
|
12
|
+
"My-Header" => "val",
|
13
|
+
"Empty-Header" => ""
|
14
|
+
}
|
15
|
+
end
|
16
|
+
let(:expected_body) { "{}" }
|
17
|
+
|
18
|
+
before do
|
19
|
+
parts.each { |part| subject.add(part) }
|
20
|
+
end
|
21
|
+
|
22
|
+
context "whole response in one part" do
|
23
|
+
let(:parts) { [raw_response] }
|
24
|
+
|
25
|
+
it "parses headers" do
|
26
|
+
expect(subject.headers.to_h).to eq(expected_headers)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "parses body" do
|
30
|
+
expect(subject.read(expected_body.size)).to eq(expected_body)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "response in many parts" do
|
35
|
+
let(:parts) { raw_response.split(//) }
|
36
|
+
|
37
|
+
it "parses headers" do
|
38
|
+
expect(subject.headers.to_h).to eq(expected_headers)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "parses body" do
|
42
|
+
expect(subject.read(expected_body.size)).to eq(expected_body)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.4.
|
4
|
+
version: 4.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Arcieri
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2020-03-
|
14
|
+
date: 2020-03-29 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: addressable
|
@@ -163,6 +163,7 @@ files:
|
|
163
163
|
- spec/lib/http/request/writer_spec.rb
|
164
164
|
- spec/lib/http/request_spec.rb
|
165
165
|
- spec/lib/http/response/body_spec.rb
|
166
|
+
- spec/lib/http/response/parser_spec.rb
|
166
167
|
- spec/lib/http/response/status_spec.rb
|
167
168
|
- spec/lib/http/response_spec.rb
|
168
169
|
- spec/lib/http/uri_spec.rb
|
@@ -186,7 +187,7 @@ metadata:
|
|
186
187
|
source_code_uri: https://github.com/httprb/http
|
187
188
|
wiki_uri: https://github.com/httprb/http/wiki
|
188
189
|
bug_tracker_uri: https://github.com/httprb/http/issues
|
189
|
-
changelog_uri: https://github.com/httprb/http/blob/v4.4.
|
190
|
+
changelog_uri: https://github.com/httprb/http/blob/v4.4.1/CHANGES.md
|
190
191
|
post_install_message:
|
191
192
|
rdoc_options: []
|
192
193
|
require_paths:
|
@@ -202,8 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
203
|
- !ruby/object:Gem::Version
|
203
204
|
version: '0'
|
204
205
|
requirements: []
|
205
|
-
|
206
|
-
rubygems_version: 2.7.6.2
|
206
|
+
rubygems_version: 3.0.3
|
207
207
|
signing_key:
|
208
208
|
specification_version: 4
|
209
209
|
summary: HTTP should be easy
|
@@ -231,6 +231,7 @@ test_files:
|
|
231
231
|
- spec/lib/http/request/writer_spec.rb
|
232
232
|
- spec/lib/http/request_spec.rb
|
233
233
|
- spec/lib/http/response/body_spec.rb
|
234
|
+
- spec/lib/http/response/parser_spec.rb
|
234
235
|
- spec/lib/http/response/status_spec.rb
|
235
236
|
- spec/lib/http/response_spec.rb
|
236
237
|
- spec/lib/http/uri_spec.rb
|