http 0.8.9 → 0.8.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3e43eef7590b892ac207ac122a1ac58e61a402ba
4
- data.tar.gz: 622380eacbab0139f5c6d1420d0df6c8c190b6d3
3
+ metadata.gz: fca22402af79f980dc7e1b701e4d422daaf7fea8
4
+ data.tar.gz: 329410d55bbbedbb774496ed0c8f8c177c9d2f12
5
5
  SHA512:
6
- metadata.gz: 4ccc0e229a0e15aa63c30d012213258a9802a04f1ec0a1dbea67d73b2647d7380b951151d7492b43b10730e6c3dd905f64bfda4621a706747e65a976a7b37cd1
7
- data.tar.gz: 1e2af51ecfcb07a33f2b6d94b93bc313b9018e2799e6ccc3f3265e7e2c8fde80bf97f7ff6e8c8309d8e693a08e72ae21f15b1cdb4442adc43608daba11d947b4
6
+ metadata.gz: 769d422631b9551000a9e647736eeafdbf511f3bd5ed40e9efac847e5be69a72f77ef7cc87b6c83811599437f7ae6a1b39349730e6096a314abe433b146b744d
7
+ data.tar.gz: faefd914628653751aa3168442a0ade2032b809add4a2e9594c5494bb05160a5edf69f5b559668f5ea4077e0f6a74b3d33ca6669eab1c15e6069279773dee271
data/CHANGES.md CHANGED
@@ -1,6 +1,6 @@
1
- ## master (unreleased)
1
+ ## 0.8.10 (2015-05-14)
2
2
 
3
- * _the future is unwritten_
3
+ * Fix cookie headers generation. (@ixti)
4
4
 
5
5
 
6
6
  ## 0.8.9 (2015-05-11)
data/lib/http/client.rb CHANGED
@@ -32,7 +32,7 @@ module HTTP
32
32
  def request(verb, uri, opts = {})
33
33
  opts = @default_options.merge(opts)
34
34
  uri = make_request_uri(uri, opts)
35
- headers = opts.headers.merge(Headers::SET_COOKIE => opts.cookies.values)
35
+ headers = make_request_headers(opts)
36
36
  body = make_request_body(opts, headers)
37
37
  proxy = opts.proxy
38
38
 
@@ -145,6 +145,15 @@ module HTTP
145
145
  uri
146
146
  end
147
147
 
148
+ # Creates request headers with cookies (if any) merged in
149
+ def make_request_headers(opts)
150
+ cookies = opts.cookies.values
151
+ return opts.headers if cookies.empty?
152
+
153
+ cookies = opts.headers.get(Headers::COOKIE).concat(cookies).join("; ")
154
+ opts.headers.merge(Headers::COOKIE => cookies)
155
+ end
156
+
148
157
  # Create the request body object to send
149
158
  def make_request_body(opts, headers)
150
159
  case
data/lib/http/headers.rb CHANGED
@@ -16,9 +16,12 @@ module HTTP
16
16
  # @see http://tools.ietf.org/html/rfc7230#section-3.2
17
17
  HEADER_NAME_RE = /^[A-Za-z0-9!#\$%&'*+\-.^_`|~]+$/
18
18
 
19
- # Cookies header name
19
+ # Set-Cookie (response) header name
20
20
  SET_COOKIE = "Set-Cookie".freeze
21
21
 
22
+ # Cookie (request) header name
23
+ COOKIE = "Cookie".freeze
24
+
22
25
  # Class constructor.
23
26
  def initialize
24
27
  @pile = []
data/lib/http/options.rb CHANGED
@@ -65,6 +65,13 @@ module HTTP
65
65
  self.headers.merge(headers)
66
66
  end
67
67
 
68
+ def_option :cookies do |cookies|
69
+ cookies.each_with_object self.cookies.dup do |(k, v), jar|
70
+ cookie = k.is_a?(Cookie) ? k : Cookie.new(k.to_s, v.to_s)
71
+ jar[cookie.name] = cookie.cookie_value
72
+ end
73
+ end
74
+
68
75
  %w(
69
76
  proxy params form json body follow response
70
77
  socket_class ssl_socket_class ssl_context ssl
@@ -145,6 +152,3 @@ module HTTP
145
152
  end
146
153
  end
147
154
  end
148
-
149
- # require cookies options
150
- require "http/options/cookies"
data/lib/http/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module HTTP
2
- VERSION = "0.8.9"
2
+ VERSION = "0.8.10"
3
3
  end
@@ -292,4 +292,32 @@ RSpec.describe HTTP do
292
292
  to raise_error(ArgumentError, /foobar/)
293
293
  end
294
294
  end
295
+
296
+ describe ".cookies" do
297
+ let(:endpoint) { "#{dummy.endpoint}/cookies" }
298
+
299
+ it "passes correct `Cookie` header" do
300
+ expect(HTTP.cookies(:abc => :def).get(endpoint).to_s).
301
+ to eq "abc: def"
302
+ end
303
+
304
+ it "properly works with cookie jars from response" do
305
+ res = HTTP.get(endpoint).flush
306
+
307
+ expect(HTTP.cookies(res.cookies).get(endpoint).to_s).
308
+ to eq "foo: bar"
309
+ end
310
+
311
+ it "properly merges cookies" do
312
+ res = HTTP.get(endpoint).flush
313
+ client = HTTP.cookies(:foo => 123, :bar => 321).cookies(res.cookies)
314
+
315
+ expect(client.get(endpoint).to_s).to eq "foo: bar\nbar: 321"
316
+ end
317
+
318
+ it "properly merges Cookie headers and cookies" do
319
+ client = HTTP.headers("Cookie" => "foo=bar").cookies(:baz => :moo)
320
+ expect(client.get(endpoint).to_s).to eq "foo: bar\nbaz: moo"
321
+ end
322
+ end
295
323
  end
@@ -128,5 +128,10 @@ class DummyServer < WEBrick::HTTPServer
128
128
  res["Content-Type"] = "application/octet-stream"
129
129
  res.body = bytes.pack("c*")
130
130
  end
131
+
132
+ get "/cookies" do |req, res|
133
+ res["Set-Cookie"] = "foo=bar"
134
+ res.body = req.cookies.map { |c| [c.name, c.value].join ": " }.join("\n")
135
+ end
131
136
  end
132
137
  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: 0.8.9
4
+ version: 0.8.10
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: 2015-05-11 00:00:00.000000000 Z
14
+ date: 2015-05-14 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: http_parser.rb
@@ -121,7 +121,6 @@ files:
121
121
  - lib/http/mime_type/adapter.rb
122
122
  - lib/http/mime_type/json.rb
123
123
  - lib/http/options.rb
124
- - lib/http/options/cookies.rb
125
124
  - lib/http/redirector.rb
126
125
  - lib/http/request.rb
127
126
  - lib/http/request/caching.rb
@@ -1,20 +0,0 @@
1
- module HTTP
2
- class Options
3
- # Default path of cookies
4
- DEFAULT_COOKIE_PATH = "/".freeze
5
-
6
- def_option :cookies do |cookies|
7
- cookies.each_with_object self.cookies.dup do |(k, v), jar|
8
- cookie = case
9
- when k.is_a?(Cookie) then k
10
- when k.is_a?(Hash) then Cookie.new k
11
- when v.is_a?(Hash) then Cookie.new(k.to_s, v)
12
- else Cookie.new(k.to_s, v.to_s)
13
- end
14
-
15
- cookie.path ||= DEFAULT_COOKIE_PATH
16
- jar[cookie.name] = cookie.set_cookie_value
17
- end
18
- end
19
- end
20
- end