restify 1.13.0 → 1.14.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: e2b5dacc128de6cbfed604453544f51eaeffd16b9b6cb83f5353ecca66d24a8d
4
- data.tar.gz: 5c3eba335362aea288f851327fa96262e5b464b9a747b092955241bb362e9c0d
3
+ metadata.gz: a52b89b2f13d578bc3ee09444ed5a01e6e80597b13f8fed2a10135f482fde561
4
+ data.tar.gz: 6e98b2d97468fe186a8500e7b88e72e8e174ef13840a76fcf152d2a8dcc57b4d
5
5
  SHA512:
6
- metadata.gz: 32569c3544a1ac6734b3c81c1e2b6a46ea7dba324c1f71f5e85bd1df93b8b73bb70114a7cec37dd8e38e561a821e674e8c437c78757d78df75e1e51b1a5a79f8
7
- data.tar.gz: 6f03d156fcc20e0dfba3d7fda0a5c7851ff5d9342fbb9b50c4d90d1f43bf65e92f0ecabb714c4023ce4ca8cfb95b231abd7ea5d1e05339e839ea046b17f3d1fe
6
+ metadata.gz: 2c61229244ba3cfeb64d37f4328059e2f9c91f394dea86abe522cb2a4b2ce422ce107ca81a5cd5c55ec2d99b9c1409bd1f4fa6ca7ab13d86697e00dda02abb42
7
+ data.tar.gz: 1dc873a2867f9cb91e55419c7bf831486b3ad86ec28186b7a2d8bac14653518a496f1cd8369a432fa1c74600b0ad91cd25c3094ffd392a9982dac2128a224484
data/CHANGELOG.md CHANGED
@@ -18,6 +18,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
18
18
  ### Breaks
19
19
 
20
20
 
21
+ ## 1.14.0 - (2020-12-15)
22
+
23
+ ### New
24
+ * Allow making requests with non-JSON bodies and custom content types (#42)
25
+
26
+
21
27
  ## 1.13.0 - (2020-06-12)
22
28
  ---
23
29
 
@@ -34,18 +34,26 @@ module Restify
34
34
  @uri = opts.fetch(:uri) { raise ArgumentError.new ':uri required.' }
35
35
  @data = opts.fetch(:data, nil)
36
36
  @timeout = opts.fetch(:timeout, 300)
37
- @headers = opts.fetch(:headers, {}).merge \
38
- 'Content-Type' => 'application/json'
37
+ @headers = opts.fetch(:headers, {})
38
+
39
+ @headers['Content-Type'] ||= 'application/json' if json?
39
40
  end
40
41
 
41
42
  def body
42
- @body ||= begin
43
- JSON.dump(data) unless data.nil?
44
- end
43
+ @body ||= json? ? JSON.dump(@data) : @data
45
44
  end
46
45
 
47
46
  def to_s
48
47
  "#<#{self.class} #{method.upcase} #{uri}>"
49
48
  end
49
+
50
+ private
51
+
52
+ def json?
53
+ return false if @data.nil?
54
+ return false if @data.is_a? String
55
+
56
+ true
57
+ end
50
58
  end
51
59
  end
@@ -3,7 +3,7 @@
3
3
  module Restify
4
4
  module VERSION
5
5
  MAJOR = 1
6
- MINOR = 13
6
+ MINOR = 14
7
7
  PATCH = 0
8
8
  STAGE = nil
9
9
  STRING = [MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join('.').freeze
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Restify do
6
+ let!(:request_stub) do
7
+ stub_request(:post, 'http://localhost/base')
8
+ .to_return do
9
+ <<-RESPONSE.gsub(/^ {8}/, '')
10
+ HTTP/1.1 200 OK
11
+ Content-Length: 333
12
+ Transfer-Encoding: chunked
13
+ Link: <http://localhost/other>; rel="neat"
14
+ RESPONSE
15
+ end
16
+ end
17
+
18
+ describe 'Request body' do
19
+ subject { Restify.new('http://localhost/base').post(body, {}, {headers: headers}).value! }
20
+ let(:headers) { {} }
21
+
22
+ context 'with JSON-like data structures' do
23
+ let(:body) { {a: 'b', c: 'd'} }
24
+
25
+ it 'is serialized as JSON' do
26
+ subject
27
+
28
+ expect(
29
+ request_stub.with(body: '{"a":"b","c":"d"}')
30
+ ).to have_been_requested
31
+ end
32
+
33
+ it 'gets a JSON media type for free' do
34
+ subject
35
+
36
+ expect(
37
+ request_stub.with(headers: {'Content-Type' => 'application/json'})
38
+ ).to have_been_requested
39
+ end
40
+
41
+ context 'with overridden media type' do
42
+ let(:headers) { {'Content-Type' => 'application/vnd.api+json'} }
43
+
44
+ it 'respects the override' do
45
+ subject
46
+
47
+ expect(
48
+ request_stub.with(headers: {'Content-Type' => 'application/vnd.api+json'})
49
+ ).to have_been_requested
50
+ end
51
+ end
52
+ end
53
+
54
+ context 'with strings' do
55
+ let(:body) { 'a=b&c=d' }
56
+
57
+ it 'is sent as provided' do
58
+ subject
59
+
60
+ expect(
61
+ request_stub.with(body: 'a=b&c=d')
62
+ ).to have_been_requested
63
+ end
64
+
65
+ it 'does not get a JSON media type' do
66
+ subject
67
+
68
+ expect(
69
+ request_stub.with {|req| req.headers['Content-Type'].nil? }
70
+ ).to have_been_requested
71
+ end
72
+
73
+ context 'with overridden media type' do
74
+ let(:headers) { {'Content-Type' => 'application/x-www-form-urlencoded'} }
75
+
76
+ it 'respects the override' do
77
+ subject
78
+
79
+ expect(
80
+ request_stub.with(headers: {'Content-Type' => 'application/x-www-form-urlencoded'})
81
+ ).to have_been_requested
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -40,7 +40,7 @@ describe Restify do
40
40
  let(:http_status) { '404 Not Found' }
41
41
 
42
42
  it 'throws a ClientError exception' do
43
- expect { request }.to raise_error Restify::NotFoundError
43
+ expect { request }.to raise_error Restify::NotFound
44
44
  end
45
45
  end
46
46
 
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.13.0
4
+ version: 1.14.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: 2020-06-12 00:00:00.000000000 Z
11
+ date: 2020-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -194,8 +194,9 @@ files:
194
194
  - spec/restify/context_spec.rb
195
195
  - spec/restify/error_spec.rb
196
196
  - spec/restify/features/head_requests_spec.rb
197
+ - spec/restify/features/request_bodies_spec.rb
197
198
  - spec/restify/features/request_headers_spec.rb
198
- - spec/restify/features/response_errors.rb
199
+ - spec/restify/features/response_errors_spec.rb
199
200
  - spec/restify/global_spec.rb
200
201
  - spec/restify/link_spec.rb
201
202
  - spec/restify/processors/base_spec.rb
@@ -227,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
228
  - !ruby/object:Gem::Version
228
229
  version: '0'
229
230
  requirements: []
230
- rubygems_version: 3.1.2
231
+ rubygems_version: 3.0.8
231
232
  signing_key:
232
233
  specification_version: 4
233
234
  summary: An experimental hypermedia REST client.
@@ -236,8 +237,9 @@ test_files:
236
237
  - spec/restify/context_spec.rb
237
238
  - spec/restify/error_spec.rb
238
239
  - spec/restify/features/head_requests_spec.rb
240
+ - spec/restify/features/request_bodies_spec.rb
239
241
  - spec/restify/features/request_headers_spec.rb
240
- - spec/restify/features/response_errors.rb
242
+ - spec/restify/features/response_errors_spec.rb
241
243
  - spec/restify/global_spec.rb
242
244
  - spec/restify/link_spec.rb
243
245
  - spec/restify/processors/base_spec.rb