http 0.8.9 → 0.8.10

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
  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