restify 1.5.0 → 1.6.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: 8910f0a86f7bab64dbcfe43794c8fddbe8d37fb289845105718f61de3228f245
4
- data.tar.gz: 843c1fd568747ed129589f08a8d7e3e040315f49f49620e46cd40265e1df2411
3
+ metadata.gz: 4c8ac98ab3e0dab023e3ab8d312e9c1e88a58dd13b05652097bc514a3c1e6d23
4
+ data.tar.gz: eaad6494cb221afc8a3ee4175da1c754fa4cc0ca69c5fa4e12af54162672ae7b
5
5
  SHA512:
6
- metadata.gz: 1697fecae910ceaf8c93f40416dcef77a1eba6a5bb0aa9fb67fffa520a7191fb273ac5a5bb9202ee00a7eec6ad559ccebd56f07b1a7c572077f4d44c9f7d3500
7
- data.tar.gz: 4ad078a7595c6fdf7fc867eb367f658c7e1cec5297845467547668177834ad5722447520de2d3bcf1c0c1ff0d7924c903b7fe55cbe443bfa33605b5de2a8da0a
6
+ metadata.gz: 6a323d105962242cc5254373f7c6481956d04dbd3cc1baada59154bcc0256e44ddae3714f184c50d99632bd4f2ceff5e16c1d27fb826c5c07f0edbfaf7e19fc7
7
+ data.tar.gz: d215812e63850c400efe4339ec7ef6d770f844bf1990344a074c8811fe5c0868d92b432ad573f6ae0e2d716f48e191101c3321b889e6cf4d934bcd593fa245b0
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.0
4
+
5
+ * Specify headers on restify clients and individual requests (#14)
6
+
3
7
  ## 1.5.0
4
8
 
5
9
  * Tune typhoeus adapter to be more race-condition resilent
data/README.md CHANGED
@@ -20,7 +20,8 @@ The HTTP adapters are mostly run in a background thread and may not survive mid-
20
20
 
21
21
  Included processors can handle:
22
22
 
23
- * Plain JSON with GitHub-Style relations
23
+ * Plain JSON with GitHub-style relations
24
+ * MessagePack with GitHub-style relations *(currently experimental)*
24
25
 
25
26
  (Beside HTTP Link header that's always supported)
26
27
 
@@ -31,7 +32,7 @@ Restify requires Ruby 2.0+.
31
32
  * HTTP cache
32
33
  * API versions via header
33
34
  * Content-Type and Language negotiation
34
- * Processors for MessagePack, JSON-HAL, etc.
35
+ * Processors for JSON-HAL, etc.
35
36
 
36
37
  ## Installation
37
38
 
@@ -48,12 +48,13 @@ module Restify
48
48
  end
49
49
 
50
50
  # rubocop:disable Metrics/MethodLength
51
- def request(method, uri, data: nil, **kwargs)
52
- request = Request.new(**kwargs,
51
+ def request(method, uri, data: nil, headers: {}, **kwargs)
52
+ request = Request.new(
53
+ headers: default_headers.merge(headers),
54
+ **kwargs,
53
55
  method: method,
54
56
  uri: join(uri),
55
- data: data,
56
- headers: headers
57
+ data: data
57
58
  )
58
59
 
59
60
  ret = cache.call(request) {|req| adapter.call(req) }
@@ -77,7 +78,7 @@ module Restify
77
78
  def marshal_dump
78
79
  {
79
80
  uri: uri.to_s,
80
- headers: headers
81
+ headers: default_headers
81
82
  }
82
83
  end
83
84
 
@@ -96,7 +97,7 @@ module Restify
96
97
  options[:cache] || Restify.cache
97
98
  end
98
99
 
99
- def headers
100
+ def default_headers
100
101
  options.fetch(:headers, {})
101
102
  end
102
103
 
@@ -3,7 +3,7 @@
3
3
  module Restify
4
4
  module VERSION
5
5
  MAJOR = 1
6
- MINOR = 5
6
+ MINOR = 6
7
7
  PATCH = 0
8
8
  STAGE = nil
9
9
  STRING = [MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join('.').freeze
@@ -13,8 +13,8 @@ describe Restify::Context do
13
13
  describe '#uri' do
14
14
  subject { super().uri }
15
15
 
16
- it { expect(subject).to be_a Addressable::URI }
17
- it { expect(subject).to eq context.uri }
16
+ it { is_expected.to be_a Addressable::URI }
17
+ it { is_expected.to eq context.uri }
18
18
  end
19
19
 
20
20
  describe '#adapter' do
@@ -36,11 +36,11 @@ describe Restify::Context do
36
36
  end
37
37
 
38
38
  describe '#headers' do
39
- let(:kwargs) { {headers: {'Accept': 'application/json'}} }
39
+ let(:kwargs) { {headers: {'Accept' => 'application/json'}} }
40
40
  subject { super().options[:headers] }
41
41
 
42
- it do
43
- expect(subject).to eq context.send :headers
42
+ it 'all headers are serialized' do
43
+ expect(subject).to eq({'Accept' => 'application/json'})
44
44
  end
45
45
  end
46
46
  end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Restify do
6
+ let!(:request_stub) do
7
+ stub_request(:get, 'http://localhost/base').to_return do
8
+ <<-EOF.gsub(/^ {8}/, '')
9
+ HTTP/1.1 200 OK
10
+ Content-Type: application/json
11
+ Transfer-Encoding: chunked
12
+ Link: <http://localhost/base>; rel="self"
13
+
14
+ { "response": "success" }
15
+ EOF
16
+ end
17
+ end
18
+
19
+ context 'with request headers configured for a single request' do
20
+ let(:context) { Restify.new('http://localhost/base') }
21
+
22
+ it 'sends the headers only for that request' do
23
+ root = context.get(
24
+ {},
25
+ headers: {'Accept' => 'application/msgpack, application/json'}
26
+ ).value!
27
+
28
+ root.rel(:self).get.value!
29
+
30
+ expect(request_stub).to have_been_requested.twice
31
+ expect(
32
+ request_stub.with(headers: {'Accept' => 'application/msgpack, application/json'})
33
+ ).to have_been_requested.once
34
+ end
35
+ end
36
+
37
+ context 'with request headers configured for context' do
38
+ let(:context) do
39
+ Restify.new(
40
+ 'http://localhost/base',
41
+ headers: {'Accept' => 'application/msgpack, application/json'}
42
+ )
43
+ end
44
+
45
+ it 'sends the headers with each request' do
46
+ root = context.get.value!
47
+
48
+ root.rel(:self).get.value!
49
+
50
+ expect(
51
+ request_stub.with(headers: {'Accept' => 'application/msgpack, application/json'})
52
+ ).to have_been_requested.twice
53
+ end
54
+
55
+ it 'can overwrite headers for single requests' do
56
+ root = context.get(
57
+ {},
58
+ headers: {'Accept' => 'application/xml'}
59
+ ).value!
60
+
61
+ root.rel(:self).get.value!
62
+
63
+ expect(
64
+ request_stub.with(headers: {'Accept' => 'application/xml'})
65
+ ).to have_been_requested.once
66
+ expect(
67
+ request_stub.with(headers: {'Accept' => 'application/msgpack, application/json'})
68
+ ).to have_been_requested.once
69
+ end
70
+
71
+ it 'can add additional headers for single requests' do
72
+ root = context.get(
73
+ {},
74
+ headers: {'X-Custom' => 'foobar'}
75
+ ).value!
76
+
77
+ root.rel(:self).get.value!
78
+
79
+ expect(
80
+ request_stub.with(headers: {'Accept' => 'application/msgpack, application/json'})
81
+ ).to have_been_requested.twice
82
+ expect(
83
+ request_stub.with(headers: {'Accept' => 'application/msgpack, application/json', 'X-Custom' => 'foobar'})
84
+ ).to have_been_requested.once
85
+ end
86
+ end
87
+ end
@@ -47,7 +47,9 @@ RSpec.configure do |config|
47
47
  ::Logging.logger.root.add_appenders ::Logging.appenders.stdout
48
48
  end
49
49
 
50
- config.after(:each) do
51
- EventMachine.stop if defined?(EventMachine) && EventMachine.reactor_running?
50
+ config.after(:all) do
51
+ if defined?(EventMachine) && EventMachine.reactor_running?
52
+ EventMachine.stop
53
+ end
52
54
  end
53
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restify
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Graichen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-31 00:00:00.000000000 Z
11
+ date: 2018-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -171,6 +171,7 @@ files:
171
171
  - lib/restify/version.rb
172
172
  - spec/restify/cache_spec.rb
173
173
  - spec/restify/context_spec.rb
174
+ - spec/restify/features/request_headers_spec.rb
174
175
  - spec/restify/global_spec.rb
175
176
  - spec/restify/link_spec.rb
176
177
  - spec/restify/processors/base_spec.rb
@@ -209,6 +210,7 @@ summary: An experimental hypermedia REST client.
209
210
  test_files:
210
211
  - spec/restify/cache_spec.rb
211
212
  - spec/restify/context_spec.rb
213
+ - spec/restify/features/request_headers_spec.rb
212
214
  - spec/restify/global_spec.rb
213
215
  - spec/restify/link_spec.rb
214
216
  - spec/restify/processors/base_spec.rb