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 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
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in faraday-http_error.gemspec
4
+ gemspec
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,7 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task default: :spec
7
+ task test: :spec
@@ -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,5 @@
1
+ module Faraday
2
+ class HttpError < StandardError
3
+ VERSION = '0.0.2'
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ require 'faraday_middleware'
2
+ require 'faraday/http_error'
@@ -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
@@ -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