protocol-http 0.17.0 → 0.18.0

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: c02d05f1a36b888ef0420bcc999a1c84d81361f85ca1cf6a08d1f17a25dd9050
4
- data.tar.gz: e65e3f34864adbea7577c8bcd06df99834af884db393a4d625c567266398a1a2
3
+ metadata.gz: d8d2f576f6e7e6ce261d80fbdc0e38e2775b2f22ac156958b1e1b91472fdfec3
4
+ data.tar.gz: b450d401f5791db371761fd52a6c1adb32807a13659570a1ad0ef0d5ef3dd8d5
5
5
  SHA512:
6
- metadata.gz: d5fb517f1f766d093cc54cb8503d215b74606e501f6f0f873b129ad8299900ea8cdae619f2b94a1d9f1c936e37235384f0d505d8773716e7ce6b4af74c53423e
7
- data.tar.gz: 0e032fc0d601764a39404ddc5e28a98956295e049ca7c0a455977f2226f418db6beea4c65584ee549e8f5b798a4c284dfca71f17e82ccc37a704cf2f04f4c786
6
+ metadata.gz: 0be25839110052bd336f729800768eb8d8ef51bf15c2852b9bc526e20a6998177dadfc4e71b889681b16ba263f25dc14ea42e0835ce4f87de7d343936ff91ea8
7
+ data.tar.gz: bf48aa19e331906fcf518eed7c6c94243656856f034d6c44a90ecf41c0bd1807c1a540d836fc61d63d6cd3acc2a769b37f1898b608296578edc45866747659a6
@@ -35,16 +35,31 @@ module Protocol
35
35
  class Headers
36
36
  Split = Header::Split
37
37
  Multiple = Header::Multiple
38
+
38
39
  TRAILERS = 'trailers'
39
40
 
40
- # Construct an instance from a headers Array or Hash. No-op if already an instance of `Headers`.
41
+ # Construct an instance from a headers Array or Hash. No-op if already an instance of `Headers`. If the underlying array is frozen, it will be duped.
41
42
  # @return [Headers] an instance of headers.
42
43
  def self.[] headers
44
+ if headers.nil?
45
+ return self.new
46
+ end
47
+
43
48
  if headers.is_a?(self)
44
- headers
45
- else
46
- self.new(headers.to_a)
49
+ if headers.frozen?
50
+ return headers.dup
51
+ else
52
+ return headers
53
+ end
54
+ end
55
+
56
+ fields = headers.to_a
57
+
58
+ if fields.frozen?
59
+ fields = fields.dup
47
60
  end
61
+
62
+ return self.new(fields)
48
63
  end
49
64
 
50
65
  def initialize(fields = [], indexed = nil)
@@ -60,7 +75,6 @@ module Protocol
60
75
 
61
76
  @fields = @fields.dup
62
77
  @indexed = @indexed.dup
63
- @tail = nil
64
78
  end
65
79
 
66
80
  def clear
@@ -69,25 +83,43 @@ module Protocol
69
83
  @tail = nil
70
84
  end
71
85
 
72
- # An array of `[key, value]` pairs.
73
- attr :fields
86
+ # Flatten trailers into the headers.
87
+ def flatten!
88
+ if @tail
89
+ self.delete(TRAILERS)
90
+ @tail = nil
91
+ end
92
+
93
+ return self
94
+ end
74
95
 
75
- # Mark the subsequent headers as trailers.
76
- def trailers!
77
- @tail ||= @fields.size
96
+ def flatten
97
+ self.dup.flatten!
78
98
  end
79
99
 
100
+ # An array of `[key, value]` pairs.
101
+ attr :fields
102
+
80
103
  # @return the trailers if there are any.
81
104
  def trailers?
82
105
  @tail != nil
83
106
  end
84
107
 
85
- # Enumerate all trailers, including evaluating all deferred headers.
86
- def trailers(&block)
108
+ # Record the current headers, and prepare to receive trailers.
109
+ def trailers!(&block)
87
110
  return nil unless self.include?(TRAILERS)
88
111
 
89
- trailers!
112
+ @tail ||= @fields.size
90
113
 
114
+ return to_enum(:trailers!) unless block_given?
115
+
116
+ if @tail
117
+ @fields.drop(@tail).each(&block)
118
+ end
119
+ end
120
+
121
+ # Enumerate all trailers, if there are any.
122
+ def trailers(&block)
91
123
  return to_enum(:trailers) unless block_given?
92
124
 
93
125
  if @tail
@@ -51,7 +51,7 @@ module Protocol
51
51
 
52
52
  # Use Methods.constants to get all constants.
53
53
  self.each do |name, value|
54
- define_method(name.downcase) do |location, headers = [], body = nil|
54
+ define_method(name.downcase) do |location, headers = nil, body = nil|
55
55
  self.call(
56
56
  Request[value, location.to_str, Headers[headers], body]
57
57
  )
@@ -28,7 +28,7 @@ module Protocol
28
28
  class Request
29
29
  prepend Body::Reader
30
30
 
31
- def initialize(scheme = nil, authority = nil, method = nil, path = nil, version = nil, headers = [], body = nil, protocol = nil)
31
+ def initialize(scheme = nil, authority = nil, method = nil, path = nil, version = nil, headers = Headers.new, body = nil, protocol = nil)
32
32
  @scheme = scheme
33
33
  @authority = authority
34
34
  @method = method
@@ -48,12 +48,6 @@ module Protocol
48
48
  attr_accessor :body
49
49
  attr_accessor :protocol
50
50
 
51
- def trailers
52
- if @headers.respond_to?(:trailers)
53
- @headers.trailers
54
- end
55
- end
56
-
57
51
  # Send the request to the given connection.
58
52
  def call(connection)
59
53
  connection.call(self)
@@ -28,7 +28,7 @@ module Protocol
28
28
  class Response
29
29
  prepend Body::Reader
30
30
 
31
- def initialize(version = nil, status = 200, headers = [], body = nil, protocol = nil)
31
+ def initialize(version = nil, status = 200, headers = Headers.new, body = nil, protocol = nil)
32
32
  @version = version
33
33
  @status = status
34
34
  @headers = headers
@@ -42,12 +42,6 @@ module Protocol
42
42
  attr_accessor :body
43
43
  attr_accessor :protocol
44
44
 
45
- def trailers
46
- if @headers.respond_to?(:trailers)
47
- @headers.trailers
48
- end
49
- end
50
-
51
45
  def hijack?
52
46
  false
53
47
  end
@@ -88,7 +82,7 @@ module Protocol
88
82
  @status == 500
89
83
  end
90
84
 
91
- def self.[](status, headers = [], body = nil, protocol = nil)
85
+ def self.[](status, headers = nil, body = nil, protocol = nil)
92
86
  body = Body::Buffered.wrap(body)
93
87
  headers = ::Protocol::HTTP::Headers[headers]
94
88
 
@@ -22,6 +22,6 @@
22
22
 
23
23
  module Protocol
24
24
  module HTTP
25
- VERSION = "0.17.0"
25
+ VERSION = "0.18.0"
26
26
  end
27
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protocol-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-07 00:00:00.000000000 Z
11
+ date: 2020-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: covered