faraday-http_error 0.0.2
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 +7 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +37 -0
- data/README.md +29 -0
- data/Rakefile +7 -0
- data/faraday-http_error.gemspec +25 -0
- data/lib/faraday/http_error.rb +75 -0
- data/lib/faraday/http_error/raise_error.rb +14 -0
- data/lib/faraday/http_error/version.rb +5 -0
- data/lib/faraday_http_error.rb +2 -0
- data/spec/lib/faraday/http_error_spec.rb +37 -0
- data/spec/spec_helper.rb +19 -0
- metadata +127 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e925463d1f41e52668e2acbab48067ac52ec3a1a
|
4
|
+
data.tar.gz: e5dc7aad5e0057cfdd9c5769e21e7c412575f999
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cc84a50b44e90682011a2db5a5765433a98b168bb9962c5c060fa6248a44d118381f428ac82e61f600d3828692feb3c1f1c3e57833d01d02e3f04f015364c66b
|
7
|
+
data.tar.gz: c2010be093db1403e0a43485874a6304f9b1055690ba266c11592b5e4cb94f7d376af0c21d699fdf2675efeefdfad54c9e313422cc38ea6e0448039692f519b5
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
faraday-http_error (0.0.2)
|
5
|
+
faraday (~> 0.9)
|
6
|
+
faraday_middleware (~> 0.9)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
diff-lcs (1.2.5)
|
12
|
+
faraday (0.9.2)
|
13
|
+
multipart-post (>= 1.2, < 3)
|
14
|
+
faraday_middleware (0.10.0)
|
15
|
+
faraday (>= 0.7.4, < 0.10)
|
16
|
+
multipart-post (2.0.0)
|
17
|
+
rake (11.2.2)
|
18
|
+
rspec (2.99.0)
|
19
|
+
rspec-core (~> 2.99.0)
|
20
|
+
rspec-expectations (~> 2.99.0)
|
21
|
+
rspec-mocks (~> 2.99.0)
|
22
|
+
rspec-core (2.99.2)
|
23
|
+
rspec-expectations (2.99.2)
|
24
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
25
|
+
rspec-mocks (2.99.4)
|
26
|
+
|
27
|
+
PLATFORMS
|
28
|
+
ruby
|
29
|
+
|
30
|
+
DEPENDENCIES
|
31
|
+
bundler (~> 1.6)
|
32
|
+
faraday-http_error!
|
33
|
+
rake
|
34
|
+
rspec (~> 2.14)
|
35
|
+
|
36
|
+
BUNDLED WITH
|
37
|
+
1.11.2
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Faraday::HttpError
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'faraday-http_error'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install faraday-http_error
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it ( https://github.com/Bidu/faraday_http_error/fork )
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'faraday/http_error/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'faraday-http_error'
|
8
|
+
spec.version = Faraday::HttpError::VERSION
|
9
|
+
spec.authors = ['Bidu Developers']
|
10
|
+
spec.email = ['dev@bidu.com.br']
|
11
|
+
spec.summary = %q(Faraday HTTP errors)
|
12
|
+
spec.description = %q(faraday middleware to launch http exceptions for 4xx and 5xx status codes)
|
13
|
+
|
14
|
+
spec.files = `git ls-files -z`.split("\x0")
|
15
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
16
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
|
+
spec.require_paths = ['lib']
|
18
|
+
|
19
|
+
spec.add_runtime_dependency 'faraday', '~> 0.9'
|
20
|
+
spec.add_runtime_dependency 'faraday_middleware', '~> 0.9'
|
21
|
+
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
23
|
+
spec.add_development_dependency 'rake'
|
24
|
+
spec.add_development_dependency 'rspec', '~> 2.14'
|
25
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'faraday/http_error/version'
|
2
|
+
require 'faraday/http_error/raise_error'
|
3
|
+
|
4
|
+
module Faraday
|
5
|
+
class HttpError < StandardError
|
6
|
+
attr_reader :body
|
7
|
+
|
8
|
+
def initialize(body = nil)
|
9
|
+
@body = body
|
10
|
+
message = "#{body}\n#{self.class.name} - " \
|
11
|
+
"version #{Faraday::HttpError::VERSION}"
|
12
|
+
|
13
|
+
super(message)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.from_response(response)
|
17
|
+
status = response[:status].to_i
|
18
|
+
body = response[:body]
|
19
|
+
|
20
|
+
if (klass = class_error_for_status(status))
|
21
|
+
# TODO: improve the error message
|
22
|
+
klass.new(body)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.class_error_for_status(http_status)
|
27
|
+
case http_status
|
28
|
+
when 400..499 then client_errors(http_status)
|
29
|
+
when 500..599 then server_errors(http_status)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.client_errors(http_status)
|
34
|
+
case http_status
|
35
|
+
when 400 then BadRequest
|
36
|
+
when 403 then Forbidden
|
37
|
+
when 404 then NotFound
|
38
|
+
when 422 then UnprocessableEntity
|
39
|
+
when 400..499 then ClientError
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.server_errors(http_status)
|
44
|
+
case http_status
|
45
|
+
when 500 then InternalServerError
|
46
|
+
when 503 then ServiceUnavailable
|
47
|
+
when 500..599 then ServerError
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Raised on errors in the 400-499 range
|
52
|
+
class ClientError < HttpError; end
|
53
|
+
|
54
|
+
# Raised when the server returns a 400 HTTP status code
|
55
|
+
class BadRequest < ClientError; end
|
56
|
+
|
57
|
+
# Raised when the server returns a 422 HTTP status code
|
58
|
+
class UnprocessableEntity < ClientError; end
|
59
|
+
|
60
|
+
# Raised when the server returns a 403 HTTP status code
|
61
|
+
class Forbidden < ClientError; end
|
62
|
+
|
63
|
+
# Raised when the server returns a 404 HTTP status code
|
64
|
+
class NotFound < ClientError; end
|
65
|
+
|
66
|
+
# Raised on errors in the 500-599 range
|
67
|
+
class ServerError < HttpError; end
|
68
|
+
|
69
|
+
# Raised when the server returns a 500 HTTP status code
|
70
|
+
class InternalServerError < ServerError; end
|
71
|
+
|
72
|
+
# Raised when the server returns a 503 HTTP status code
|
73
|
+
class ServiceUnavailable < ServerError; end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Faraday
|
2
|
+
class HttpError < StandardError
|
3
|
+
# Faraday middleware responsible to raise an error when there's a
|
4
|
+
# mapped error for the HTTP status code
|
5
|
+
class RaiseError < Faraday::Response::Middleware
|
6
|
+
private
|
7
|
+
|
8
|
+
def on_complete(response)
|
9
|
+
error = Faraday::HttpError.from_response(response)
|
10
|
+
fail error if error
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Faraday::HttpError do
|
4
|
+
describe '.from_response' do
|
5
|
+
let(:error_message) { 'error message' }
|
6
|
+
let(:version) { Faraday::HttpError::VERSION }
|
7
|
+
let(:status) { 422 }
|
8
|
+
let(:response) { { status: status, body: error_message } }
|
9
|
+
let(:error) { Faraday::HttpError.from_response(response) }
|
10
|
+
|
11
|
+
describe '#body' do
|
12
|
+
it 'must be the original error message' do
|
13
|
+
expect(error.body).to eq(error_message)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#message' do
|
18
|
+
it 'must include the original error message' do
|
19
|
+
expect(error.message).to include(error_message)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'must include the right error class' do
|
23
|
+
expect(error.message).to include('Faraday::HttpError::UnprocessableEntity')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'must include the gem version' do
|
27
|
+
expect(error.message).to include("version #{version}")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#initialize' do
|
32
|
+
it 'accepts blank exception' do
|
33
|
+
expect { Faraday::HttpError.new }.not_to raise_error
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'faraday_http_error'
|
2
|
+
|
3
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
4
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
5
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
6
|
+
# loaded once.
|
7
|
+
#
|
8
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
11
|
+
config.run_all_when_everything_filtered = true
|
12
|
+
config.filter_run :focus
|
13
|
+
|
14
|
+
# Run specs in random order to surface order dependencies. If you find an
|
15
|
+
# order dependency and want to debug it, you can fix the order by providing
|
16
|
+
# the seed, which is printed after each run.
|
17
|
+
# --seed 1234
|
18
|
+
config.order = 'random'
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: faraday-http_error
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bidu Developers
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.9'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday_middleware
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.9'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.6'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.6'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.14'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.14'
|
83
|
+
description: faraday middleware to launch http exceptions for 4xx and 5xx status codes
|
84
|
+
email:
|
85
|
+
- dev@bidu.com.br
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".rspec"
|
91
|
+
- Gemfile
|
92
|
+
- Gemfile.lock
|
93
|
+
- README.md
|
94
|
+
- Rakefile
|
95
|
+
- faraday-http_error.gemspec
|
96
|
+
- lib/faraday/http_error.rb
|
97
|
+
- lib/faraday/http_error/raise_error.rb
|
98
|
+
- lib/faraday/http_error/version.rb
|
99
|
+
- lib/faraday_http_error.rb
|
100
|
+
- spec/lib/faraday/http_error_spec.rb
|
101
|
+
- spec/spec_helper.rb
|
102
|
+
homepage:
|
103
|
+
licenses: []
|
104
|
+
metadata: {}
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 2.5.1
|
122
|
+
signing_key:
|
123
|
+
specification_version: 4
|
124
|
+
summary: Faraday HTTP errors
|
125
|
+
test_files:
|
126
|
+
- spec/lib/faraday/http_error_spec.rb
|
127
|
+
- spec/spec_helper.rb
|