restify 1.5.0 → 1.6.0

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