restify 1.10.0 → 1.11.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: f44b84123c73ffd08cc8668448b03470c06acaf0f693e844fface91ff44179b5
4
- data.tar.gz: c194b2db48a18a7f234bba20ff4161f98277b1146e6b7bf2572c877c285c3794
3
+ metadata.gz: 9393a0338cd138604044dd16e2ced2370b317d00c4317dfb05f559d4dd9111e4
4
+ data.tar.gz: '0348f419a9d4aadb7edc5e5c5ded5f3317ddac726571eaec3a81e180993323b0'
5
5
  SHA512:
6
- metadata.gz: 89de3a2282568b6cd4b58afdf04e2271abf283721a25535e5420a4b1e52e4ed6b3edf894180d6fd15ee010c7692f99942c047fe7baef81d5bd67ff13b756e189
7
- data.tar.gz: e6b18bfd819aec933acdb9fbec820ea7e742918eebc795c77f5f7ba0b927ccae85b876b367df8325d90e2899aad77bcf30f691781419669fd7406a156e197f86
6
+ metadata.gz: 36f07fdcba6ed8bdfebd6ef58bcb1929a8ae4bb96a0201936fceccc618c095cb8ca4ca7cb387d9b98dcd9551bf08f22ed304eb67651a2ba71c25a657b3804b4f
7
+ data.tar.gz: 3ab69445ea47a84ad59aa9dc2050ec8fa507283d89fb9aca641a55e7a51893e6c0989d3052f00d8160cbfd6530808b566ae593e91711cf460f3ee1d7b3cf2a53
@@ -1,91 +1,132 @@
1
1
  # Changelog
2
+ All notable changes to this project will be documented in this file.
2
3
 
3
- ## 1.10.0
4
+ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
+ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
4
6
 
5
- * Raise more specific error on a few status codes (#17)
6
- * Complete promises with an empty list (but a list) of dependencies (#18)
7
7
 
8
- ## 1.9.0
8
+ ## Unreleased
9
+ ---
9
10
 
10
- * Do not raise error on 3XX responses but return responses
11
+ ### New
11
12
 
12
- ## 1.8.0
13
+ ### Changes
13
14
 
14
- * Add HEAD request method (#16)
15
+ ### Fixes
15
16
 
16
- ## 1.7.0
17
+ ### Breaks
17
18
 
18
- * Introduce promise dependency timeouts (#15)
19
19
 
20
- ## 1.6.0
20
+ ## 1.11.0 - (2019-07-11)
21
+ ### New
22
+ * Explicit exception classes for HTTP status codes 500, 502, 503, 504
21
23
 
22
- * Specify headers on restify clients and individual requests (#14)
24
+ ## 1.10.0 - 2018-12-11
25
+ ### Changed
26
+ - Raise more specific error on a few status codes (#17)
27
+ - Complete promises with an empty list (but a list) of dependencies (#18)
23
28
 
24
- ## 1.5.0
29
+ ## 1.9.0 - 2018-11-13
30
+ ### Changed
31
+ - Do not raise error on 3XX responses but return responses
25
32
 
26
- * Tune typhoeus adapter to be more race-condition resilent
27
- * Add MessagePack processor enabled by default
33
+ ## 1.8.0 - 2018-08-22
34
+ ### Added
35
+ - Add HEAD request method (#16)
28
36
 
29
- ## 1.4.4
37
+ ## 1.7.0 - 2018-08-15
38
+ ### Added
39
+ - Introduce promise dependency timeouts (#15)
30
40
 
31
- * Fix race condition in typhoeus adapter
32
- * Add `#request` to `NetworkError` to ease debugging
41
+ ## 1.6.0 - 2018-08-09
42
+ ### Changed
43
+ - Specify headers on restify clients and individual requests (#14)
33
44
 
34
- ## 1.4.3
45
+ ## 1.5.0 - 2018-07-31
46
+ ### Added
47
+ - Add MessagePack processor enabled by default
35
48
 
36
- * Add advanced logging capabilities using logging gem
37
- * Improve compatibility with webmocks returning `nil` as headers
49
+ ### Changed
50
+ - Tune typhoeus adapter to be more race-condition resilent
38
51
 
39
- ## 1.4.1
52
+ ## 1.4.4 - 2018-07-13
53
+ ### Added
54
+ - Add `#request` to `NetworkError` to ease debugging
40
55
 
41
- * Fix possible deadlock issues
56
+ ### Changed
57
+ - Fix race condition in typhoeus adapter
42
58
 
43
- ## 1.4.0
59
+ ## 1.4.3 - 2017-11-15
60
+ ### Added
61
+ - Add advanced logging capabilities using logging gem
44
62
 
45
- * Fix possible concurrency issue with typhoeus adapter
46
- * Add timeout option to requests (only supported by typhoeus adapter)
63
+ ### Changed
64
+ - Improve compatibility with webmocks returning `nil` as headers
47
65
 
48
- ## 1.3.1
66
+ ## 1.4.1 - 2017-11-15
67
+ ### Changed
68
+ - Fix possible deadlock issues
49
69
 
50
- * Improve typhoeus adapters initial request queuing
51
- * Disable default pipelining
70
+ ## 1.4.0 - 2017-11-10
71
+ ### Added
72
+ - Add timeout option to requests (only supported by typhoeus adapter)
52
73
 
53
- ## 1.3.0
74
+ ### Changed
75
+ - Fix possible concurrency issue with typhoeus adapter
54
76
 
55
- * Improve typhoeus adapter to better utilize concurrency
56
- * Default to new typhoeus adapter
77
+ ## 1.3.1 - 2017-11-10
78
+ ### Changed
79
+ - Improve typhoeus adapters initial request queuing
80
+ - Disable default pipelining
57
81
 
58
- ## 1.2.1
82
+ ## 1.3.0 - 2017-11-08
83
+ ### Changed
84
+ - Improve typhoeus adapter to better utilize concurrency
85
+ - Default to new typhoeus adapter
59
86
 
60
- * Fix issue with Ruby 2.2 compatibility
87
+ ## 1.2.1 - 2017-10-30
88
+ ### Changed
89
+ - Fix issue with Ruby 2.2 compatibility
61
90
 
62
- ## 1.2.0
91
+ ## 1.2.0 - 2017-10-30
92
+ ### Added
93
+ - Add experimental PooledEM adapter (#10)
63
94
 
64
- * Add experimental PooledEM adapter (#10)
65
- * Improve marshalling of resources
95
+ ### Changed
96
+ - Improve marshaling of resources
66
97
 
67
- ## 1.1.0
98
+ ## 1.1.0 - 2017-05-12
99
+ ### Added
100
+ - Add shortcuts for creating fulfilled / rejected promises (#6)
68
101
 
69
- * Return response body if no processor matches (#7)
70
- * Add shortcuts for creating fulfilled / rejected promises (#6)
102
+ ### Changed
103
+ - Return response body if no processor matches (#7)
71
104
 
72
- ## 1.0.0
105
+ ## 1.0.0 - 2016-08-22
106
+ ### Added
107
+ - Experimental cache API doing nothing for now
73
108
 
74
- * Experimental cache API doing nothing for now
75
- * Use `~> 1.0` of `concurrent-ruby`
109
+ ### Changed
110
+ - Use `~> 1.0` of `concurrent-ruby`
76
111
 
77
- ## 0.5.0
112
+ ## 0.5.0 - 2016-04-04
113
+ ### Added
114
+ - Add `sync` option to typhoeus adapter
115
+ - Add registry for storing entry points
78
116
 
79
- * Add `sync` option to typhoeus adapter
80
- * Add registry for storing entry points
81
- * Make eventmachine based adapter default
117
+ ### Changed
118
+ - Make eventmachine based adapter default
82
119
 
83
- ## 0.4.0
120
+ ## 0.4.0 - 2016-02-24
121
+ ### Added
122
+ - Add method to explicit access resource data
84
123
 
85
- * Add method to explicit access resource data
86
- * Drop obligation in favor of simple Concurrent::IVar based promise class.
124
+ ### Changed
125
+ - Use typhoeus as default adapter
126
+ - `Restify.new` returns relation now instead of resource
127
+
128
+ ### Removed
129
+ - Drop obligation in favor of simple Concurrent::IVar based promise class.
87
130
  Notable changes:
88
- - Returned object us of type `Restify::Promise` now.
89
- - `value` will not raise exception but return `nil` in case of failure. Use `value!` for old behavior.
90
- * Use typhoeus as default adapter
91
- * `Restify.new` returns relation now instead of resource
131
+ - Returned object us of type `Restify::Promise` now.
132
+ - `value` will not raise exception but return `nil` in case of failure. Use `value!` for old behavior.
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Restify
2
2
 
3
3
  [![Build Status](https://travis-ci.org/jgraichen/restify.svg?branch=master)](https://travis-ci.org/jgraichen/restify)
4
+ [![Code Quality](https://codebeat.co/badges/18ffe6b7-8239-493a-b5b6-be329b9f275d)](https://codebeat.co/projects/github-com-jgraichen-restify-master)
4
5
 
5
6
  Restify is an hypermedia REST client that does parallel, concurrent and keep-alive requests by default.
6
7
 
@@ -21,6 +21,7 @@ module Restify
21
21
  @hydra = ::Typhoeus::Hydra.new(**options)
22
22
  @mutex = Mutex.new
23
23
  @signal = ConditionVariable.new
24
+ @thread = nil
24
25
  end
25
26
 
26
27
  def sync?
@@ -34,6 +34,14 @@ module Restify
34
34
  UnprocessableEntity.new(response)
35
35
  when 400...500
36
36
  ClientError.new(response)
37
+ when 500
38
+ InternalServerError.new(response)
39
+ when 502
40
+ BadGateway.new(response)
41
+ when 503
42
+ ServiceUnavailable.new(response)
43
+ when 504
44
+ GatewayTimeout.new(response)
37
45
  when 500...600
38
46
  ServerError.new(response)
39
47
  else
@@ -87,6 +95,13 @@ module Restify
87
95
  # 5XX status code.
88
96
  class ServerError < ResponseError; end
89
97
 
98
+ # A {GatewayError} is the common base class for 502, 503 and 504
99
+ # response codes often used by load balancers when upstream servers are
100
+ # failing or not available.
101
+ #
102
+ # This can be used to catch "common" gateway responses.
103
+ class GatewayError < ResponseError; end
104
+
90
105
  ###
91
106
  # CONCRETE SUBCLASSES FOR TYPICAL STATUS CODES
92
107
  #
@@ -97,4 +112,10 @@ module Restify
97
112
  class NotFound < ClientError; end
98
113
  class NotAcceptable < ClientError; end
99
114
  class UnprocessableEntity < ClientError; end
115
+
116
+ class InternalServerError < ServerError; end
117
+
118
+ class BadGateway < GatewayError; end
119
+ class ServiceUnavailable < GatewayError; end
120
+ class GatewayTimeout < GatewayError; end
100
121
  end
@@ -25,10 +25,10 @@ module Restify
25
25
  end
26
26
 
27
27
  class << self
28
- REGEXP_URI = /<[^>]*>\s*/
29
- REGEXP_PAR = /;\s*\w+\s*=\s*/i
30
- REGEXP_QUT = /"[^"]*"\s*/
31
- REGEXP_ARG = /\w+\s*/i
28
+ REGEXP_URI = /<[^>]*>\s*/.freeze
29
+ REGEXP_PAR = /;\s*\w+\s*=\s*/i.freeze
30
+ REGEXP_QUT = /"[^"]*"\s*/.freeze
31
+ REGEXP_ARG = /\w+\s*/i.freeze
32
32
 
33
33
  def parse(string)
34
34
  scanner = StringScanner.new(string.strip)
@@ -23,6 +23,7 @@ module Restify
23
23
 
24
24
  super
25
25
  raise t if incomplete?
26
+
26
27
  self
27
28
  end
28
29
 
@@ -79,6 +79,7 @@ module Restify
79
79
 
80
80
  def convert_param(value)
81
81
  return value.to_param.to_s if value.respond_to?(:to_param)
82
+
82
83
  value
83
84
  end
84
85
 
@@ -61,6 +61,7 @@ module Restify
61
61
  class << self
62
62
  def new(timeout, *args)
63
63
  return timeout if timeout.is_a?(self)
64
+
64
65
  super
65
66
  end
66
67
  end
@@ -3,7 +3,7 @@
3
3
  module Restify
4
4
  module VERSION
5
5
  MAJOR = 1
6
- MINOR = 10
6
+ MINOR = 11
7
7
  PATCH = 0
8
8
  STAGE = nil
9
9
  STRING = [MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join('.').freeze
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Restify::ResponseError do
6
+ let(:response) { double 'response' }
7
+ let(:message) { 'Error' }
8
+ let(:uri) { 'http://localhost' }
9
+
10
+ before do
11
+ allow(response).to receive(:uri).and_return(uri)
12
+ allow(response).to receive(:code).and_return(code)
13
+ allow(response).to receive(:message).and_return(message)
14
+ allow(response).to receive(:decoded_body).and_return({})
15
+ end
16
+
17
+
18
+ describe '.from_code' do
19
+ subject(:err) { described_class.from_code(response) }
20
+
21
+ context 'with 400 Bad Request' do
22
+ let(:code) { 400 }
23
+ it { is_expected.to be_a ::Restify::BadRequest }
24
+ end
25
+
26
+ context 'with 401 Unauthorized' do
27
+ let(:code) { 401 }
28
+ it { is_expected.to be_a ::Restify::Unauthorized }
29
+ end
30
+
31
+ context 'with 404 Unauthorized' do
32
+ let(:code) { 404 }
33
+ it { is_expected.to be_a ::Restify::NotFound }
34
+ end
35
+
36
+ context 'with 406 Not Acceptable' do
37
+ let(:code) { 406 }
38
+ it { is_expected.to be_a ::Restify::NotAcceptable }
39
+ end
40
+
41
+ context 'with 422 Unprocessable Entity' do
42
+ let(:code) { 422 }
43
+ it { is_expected.to be_a ::Restify::UnprocessableEntity }
44
+ end
45
+
46
+ context 'with 500 Internal Server Error' do
47
+ let(:code) { 500 }
48
+ it { is_expected.to be_a ::Restify::InternalServerError }
49
+ end
50
+
51
+ context 'with 502 Bad Gateway' do
52
+ let(:code) { 502 }
53
+ it { is_expected.to be_a ::Restify::BadGateway }
54
+ end
55
+
56
+ context 'with 503 Service Unavailable' do
57
+ let(:code) { 503 }
58
+ it { is_expected.to be_a ::Restify::ServiceUnavailable }
59
+ end
60
+
61
+ context 'with 504 Gateway Timeout' do
62
+ let(:code) { 504 }
63
+ it { is_expected.to be_a ::Restify::GatewayTimeout }
64
+ end
65
+ end
66
+ end
@@ -3,11 +3,14 @@
3
3
  require 'rspec'
4
4
  require 'webmock/rspec'
5
5
 
6
- if ENV['CI'] || (defined?(:RUBY_ENGINE) && RUBY_ENGINE != 'rbx')
7
- require 'coveralls'
8
- Coveralls.wear! do
9
- add_filter 'spec'
10
- end
6
+ require 'simplecov'
7
+ SimpleCov.start do
8
+ add_filter 'spec'
9
+ end
10
+
11
+ if ENV['CI']
12
+ require 'codecov'
13
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
11
14
  end
12
15
 
13
16
  require 'restify'
@@ -51,6 +54,7 @@ RSpec.configure do |config|
51
54
  ::Logging.logger.root.add_appenders ::Logging.appenders.stdout
52
55
  end
53
56
 
57
+ config.warnings = true
54
58
  config.after(:suite) do
55
59
  EventMachine.stop if defined?(EventMachine) && EventMachine.reactor_running?
56
60
  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.10.0
4
+ version: 1.11.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-12-11 00:00:00.000000000 Z
11
+ date: 2019-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -140,16 +140,16 @@ dependencies:
140
140
  name: bundler
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: '1.5'
145
+ version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: '1.5'
152
+ version: '0'
153
153
  description: An experimental hypermedia REST client that uses parallel, keep-alive
154
154
  and pipelined requests by default.
155
155
  email:
@@ -186,6 +186,7 @@ files:
186
186
  - lib/restify/version.rb
187
187
  - spec/restify/cache_spec.rb
188
188
  - spec/restify/context_spec.rb
189
+ - spec/restify/error_spec.rb
189
190
  - spec/restify/features/head_requests_spec.rb
190
191
  - spec/restify/features/request_headers_spec.rb
191
192
  - spec/restify/features/response_errors.rb
@@ -221,13 +222,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
222
  version: '0'
222
223
  requirements: []
223
224
  rubyforge_project:
224
- rubygems_version: 2.7.8
225
+ rubygems_version: 2.7.7
225
226
  signing_key:
226
227
  specification_version: 4
227
228
  summary: An experimental hypermedia REST client.
228
229
  test_files:
229
230
  - spec/restify/cache_spec.rb
230
231
  - spec/restify/context_spec.rb
232
+ - spec/restify/error_spec.rb
231
233
  - spec/restify/features/head_requests_spec.rb
232
234
  - spec/restify/features/request_headers_spec.rb
233
235
  - spec/restify/features/response_errors.rb