From 72843948d8a6f66345adc254fa91cf1097592b22 Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Sun, 18 Aug 2013 09:37:52 +0200 Subject: [PATCH] Remove ClientError, ServerError, and ParserError Closes #440. --- lib/twitter/client.rb | 9 ++-- lib/twitter/default.rb | 9 ++-- lib/twitter/error/bad_gateway.rb | 4 +- lib/twitter/error/bad_request.rb | 4 +- lib/twitter/error/client_error.rb | 9 ---- lib/twitter/error/forbidden.rb | 4 +- lib/twitter/error/gateway_timeout.rb | 4 +- lib/twitter/error/internal_server_error.rb | 4 +- lib/twitter/error/not_acceptable.rb | 4 +- lib/twitter/error/not_found.rb | 4 +- lib/twitter/error/parser_error.rb | 9 ---- lib/twitter/error/server_error.rb | 9 ---- lib/twitter/error/service_unavailable.rb | 4 +- lib/twitter/error/too_many_requests.rb | 4 +- lib/twitter/error/unauthorized.rb | 4 +- lib/twitter/error/unprocessable_entity.rb | 4 +- spec/twitter/client_spec.rb | 4 +- spec/twitter/error/client_error_spec.rb | 50 ---------------------- spec/twitter/error/server_error_spec.rb | 20 --------- spec/twitter/error_spec.rb | 46 ++++++++++++++++++++ 20 files changed, 76 insertions(+), 133 deletions(-) delete mode 100644 lib/twitter/error/client_error.rb delete mode 100644 lib/twitter/error/parser_error.rb delete mode 100644 lib/twitter/error/server_error.rb delete mode 100644 spec/twitter/error/client_error_spec.rb delete mode 100644 spec/twitter/error/server_error_spec.rb diff --git a/lib/twitter/client.rb b/lib/twitter/client.rb index 2da2c8176..69c96d3d1 100644 --- a/lib/twitter/client.rb +++ b/lib/twitter/client.rb @@ -17,8 +17,7 @@ require 'twitter/api/undocumented' require 'twitter/api/users' require 'twitter/configurable' -require 'twitter/error/client_error' -require 'twitter/error/parser_error' +require 'twitter/error' require 'simple_oauth' require 'base64' require 'uri' @@ -104,10 +103,8 @@ def request_setup(method, path, params, signature_params) def request(method, path, params={}, signature_params=params) request_setup = request_setup(method, path, params, signature_params) connection.send(method.to_sym, path, params, &request_setup).env - rescue Faraday::Error::ClientError - raise Twitter::Error::ClientError - rescue JSON::ParserError - raise Twitter::Error::ParserError + rescue Faraday::Error::ClientError, JSON::ParserError + raise Twitter::Error end # Returns a Faraday::Connection object diff --git a/lib/twitter/default.rb b/lib/twitter/default.rb index d169d2937..4b0245f8c 100644 --- a/lib/twitter/default.rb +++ b/lib/twitter/default.rb @@ -1,7 +1,6 @@ require 'faraday' require 'faraday/request/multipart' -require 'twitter/error/client_error' -require 'twitter/error/server_error' +require 'twitter/error' require 'twitter/request/multipart_with_file' require 'twitter/response/parse_json' require 'twitter/response/raise_error' @@ -27,10 +26,8 @@ module Default builder.use Faraday::Request::Multipart # Convert request params to "www-form-urlencoded" builder.use Faraday::Request::UrlEncoded - # Handle 4xx server responses - builder.use Twitter::Response::RaiseError, Twitter::Error::ClientError - # Handle 5xx server responses - builder.use Twitter::Response::RaiseError, Twitter::Error::ServerError + # Handle error responses + builder.use Twitter::Response::RaiseError, Twitter::Error # Parse JSON response bodies builder.use Twitter::Response::ParseJson # Set Faraday's HTTP adapter diff --git a/lib/twitter/error/bad_gateway.rb b/lib/twitter/error/bad_gateway.rb index e8d2f2096..a8e14e9d3 100644 --- a/lib/twitter/error/bad_gateway.rb +++ b/lib/twitter/error/bad_gateway.rb @@ -1,9 +1,9 @@ -require 'twitter/error/server_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 502 - class BadGateway < Twitter::Error::ServerError + class BadGateway < Twitter::Error HTTP_STATUS_CODE = 502 end end diff --git a/lib/twitter/error/bad_request.rb b/lib/twitter/error/bad_request.rb index 463c9011a..4b468b0d7 100644 --- a/lib/twitter/error/bad_request.rb +++ b/lib/twitter/error/bad_request.rb @@ -1,9 +1,9 @@ -require 'twitter/error/client_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 400 - class BadRequest < Twitter::Error::ClientError + class BadRequest < Twitter::Error HTTP_STATUS_CODE = 400 end end diff --git a/lib/twitter/error/client_error.rb b/lib/twitter/error/client_error.rb deleted file mode 100644 index 8f5b4d322..000000000 --- a/lib/twitter/error/client_error.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'twitter/error' - -module Twitter - class Error - # Raised when Twitter returns a 4xx HTTP status code or there's an error in Faraday - class ClientError < Twitter::Error - end - end -end diff --git a/lib/twitter/error/forbidden.rb b/lib/twitter/error/forbidden.rb index b5b27e871..94213ca49 100644 --- a/lib/twitter/error/forbidden.rb +++ b/lib/twitter/error/forbidden.rb @@ -1,9 +1,9 @@ -require 'twitter/error/client_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 403 - class Forbidden < Twitter::Error::ClientError + class Forbidden < Twitter::Error HTTP_STATUS_CODE = 403 end end diff --git a/lib/twitter/error/gateway_timeout.rb b/lib/twitter/error/gateway_timeout.rb index 4e23ca394..80fde61d1 100644 --- a/lib/twitter/error/gateway_timeout.rb +++ b/lib/twitter/error/gateway_timeout.rb @@ -1,9 +1,9 @@ -require 'twitter/error/server_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 504 - class GatewayTimeout < Twitter::Error::ServerError + class GatewayTimeout < Twitter::Error HTTP_STATUS_CODE = 504 end end diff --git a/lib/twitter/error/internal_server_error.rb b/lib/twitter/error/internal_server_error.rb index 2bd5efb25..cf232bbaa 100644 --- a/lib/twitter/error/internal_server_error.rb +++ b/lib/twitter/error/internal_server_error.rb @@ -1,9 +1,9 @@ -require 'twitter/error/server_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 500 - class InternalServerError < Twitter::Error::ServerError + class InternalServerError < Twitter::Error HTTP_STATUS_CODE = 500 end end diff --git a/lib/twitter/error/not_acceptable.rb b/lib/twitter/error/not_acceptable.rb index fea6d5ddd..ef0d9341d 100644 --- a/lib/twitter/error/not_acceptable.rb +++ b/lib/twitter/error/not_acceptable.rb @@ -1,9 +1,9 @@ -require 'twitter/error/client_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 406 - class NotAcceptable < Twitter::Error::ClientError + class NotAcceptable < Twitter::Error HTTP_STATUS_CODE = 406 end end diff --git a/lib/twitter/error/not_found.rb b/lib/twitter/error/not_found.rb index bf52a5e18..abfd543e2 100644 --- a/lib/twitter/error/not_found.rb +++ b/lib/twitter/error/not_found.rb @@ -1,9 +1,9 @@ -require 'twitter/error/client_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 404 - class NotFound < Twitter::Error::ClientError + class NotFound < Twitter::Error HTTP_STATUS_CODE = 404 end end diff --git a/lib/twitter/error/parser_error.rb b/lib/twitter/error/parser_error.rb deleted file mode 100644 index 6c2a6d73f..000000000 --- a/lib/twitter/error/parser_error.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'twitter/error' - -module Twitter - class Error - # Raised when JSON parsing fails - class ParserError < Twitter::Error - end - end -end diff --git a/lib/twitter/error/server_error.rb b/lib/twitter/error/server_error.rb deleted file mode 100644 index 02bc8e4be..000000000 --- a/lib/twitter/error/server_error.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'twitter/error' - -module Twitter - class Error - # Raised when Twitter returns a 5xx HTTP status code - class ServerError < Twitter::Error - end - end -end diff --git a/lib/twitter/error/service_unavailable.rb b/lib/twitter/error/service_unavailable.rb index 436fc79c9..be8c98b5a 100644 --- a/lib/twitter/error/service_unavailable.rb +++ b/lib/twitter/error/service_unavailable.rb @@ -1,9 +1,9 @@ -require 'twitter/error/server_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 503 - class ServiceUnavailable < Twitter::Error::ServerError + class ServiceUnavailable < Twitter::Error HTTP_STATUS_CODE = 503 end end diff --git a/lib/twitter/error/too_many_requests.rb b/lib/twitter/error/too_many_requests.rb index a82779666..bf3162e34 100644 --- a/lib/twitter/error/too_many_requests.rb +++ b/lib/twitter/error/too_many_requests.rb @@ -1,9 +1,9 @@ -require 'twitter/error/client_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 429 - class TooManyRequests < Twitter::Error::ClientError + class TooManyRequests < Twitter::Error HTTP_STATUS_CODE = 429 end EnhanceYourCalm = TooManyRequests diff --git a/lib/twitter/error/unauthorized.rb b/lib/twitter/error/unauthorized.rb index d6d31efb9..3df7c2f9f 100644 --- a/lib/twitter/error/unauthorized.rb +++ b/lib/twitter/error/unauthorized.rb @@ -1,9 +1,9 @@ -require 'twitter/error/client_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 401 - class Unauthorized < Twitter::Error::ClientError + class Unauthorized < Twitter::Error HTTP_STATUS_CODE = 401 end end diff --git a/lib/twitter/error/unprocessable_entity.rb b/lib/twitter/error/unprocessable_entity.rb index c7c7115b4..6b62bd801 100644 --- a/lib/twitter/error/unprocessable_entity.rb +++ b/lib/twitter/error/unprocessable_entity.rb @@ -1,9 +1,9 @@ -require 'twitter/error/client_error' +require 'twitter/error' module Twitter class Error # Raised when Twitter returns the HTTP status code 422 - class UnprocessableEntity < Twitter::Error::ClientError + class UnprocessableEntity < Twitter::Error HTTP_STATUS_CODE = 422 end end diff --git a/spec/twitter/client_spec.rb b/spec/twitter/client_spec.rb index dd01795cc..cecaf8ece 100644 --- a/spec/twitter/client_spec.rb +++ b/spec/twitter/client_spec.rb @@ -153,11 +153,11 @@ end it "catches Faraday errors" do allow(subject).to receive(:connection).and_raise(Faraday::Error::ClientError.new("Oops")) - expect{subject.send(:request, :get, "/path")}.to raise_error Twitter::Error::ClientError + expect{subject.send(:request, :get, "/path")}.to raise_error Twitter::Error end it "catches JSON::ParserError errors" do allow(subject).to receive(:connection).and_raise(JSON::ParserError.new("unexpected token")) - expect{subject.send(:request, :get, "/path")}.to raise_error Twitter::Error::ParserError + expect{subject.send(:request, :get, "/path")}.to raise_error Twitter::Error end end diff --git a/spec/twitter/error/client_error_spec.rb b/spec/twitter/error/client_error_spec.rb deleted file mode 100644 index 692315c55..000000000 --- a/spec/twitter/error/client_error_spec.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'helper' - -describe Twitter::Error::ClientError do - - before do - @client = Twitter::Client.new - end - - Twitter::Error::ClientError.errors.each do |status, exception| - [nil, "error", "errors"].each do |body| - context "when HTTP status is #{status} and body is #{body.inspect}" do - before do - body_message = '{"' + body + '":"Client Error"}' unless body.nil? - stub_get("/1.1/statuses/user_timeline.json").with(:query => {:screen_name => "sferik"}).to_return(:status => status, :body => body_message) - end - it "raises #{exception.name}" do - expect{@client.user_timeline("sferik")}.to raise_error exception - end - end - end - context "when HTTP status is #{status} and body is errors" do - context "when errors is an array of hashes" do - context "when error code is nil" do - before do - body_message = '{"errors":[{"message":"Client Error"}]}' - stub_get("/1.1/statuses/user_timeline.json").with(:query => {:screen_name => "sferik"}).to_return(:status => status, :body => body_message) - end - it "raises #{exception.name}" do - expect{@client.user_timeline("sferik")}.to raise_error { |error| - expect(error.code).to eq nil - } - end - - context "when error code is 187" do - before do - body_message = '{"errors":[{"message":"Client Error","code": 187 }]}' - stub_get("/1.1/statuses/user_timeline.json").with(:query => {:screen_name => "sferik"}).to_return(:status => status, :body => body_message) - end - it "raises #{exception.name}" do - expect{@client.user_timeline("sferik")}.to raise_error { |error| - expect(error.code).to eq 187 - } - end - end - end - end - end - end - -end diff --git a/spec/twitter/error/server_error_spec.rb b/spec/twitter/error/server_error_spec.rb deleted file mode 100644 index 13a8ff0da..000000000 --- a/spec/twitter/error/server_error_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'helper' - -describe Twitter::Error::ServerError do - - before do - @client = Twitter::Client.new - end - - Twitter::Error::ServerError.errors.each do |status, exception| - context "when HTTP status is #{status}" do - before do - stub_get("/1.1/statuses/user_timeline.json").with(:query => {:screen_name => "sferik"}).to_return(:status => status) - end - it "raises #{exception.name}" do - expect{@client.user_timeline("sferik")}.to raise_error exception - end - end - end - -end diff --git a/spec/twitter/error_spec.rb b/spec/twitter/error_spec.rb index 34b865658..bf19c7f8e 100644 --- a/spec/twitter/error_spec.rb +++ b/spec/twitter/error_spec.rb @@ -2,6 +2,10 @@ describe Twitter::Error do + before do + @client = Twitter::Client.new + end + describe "#initialize" do it "wraps another error class" do begin @@ -17,4 +21,46 @@ end end + Twitter::Error.errors.each do |status, exception| + + [nil, "error", "errors"].each do |body| + context "when HTTP status is #{status} and body is #{body.inspect}" do + before do + body_message = '{"' + body + '":"Client Error"}' unless body.nil? + stub_get("/1.1/statuses/user_timeline.json").with(:query => {:screen_name => "sferik"}).to_return(:status => status, :body => body_message) + end + it "raises #{exception.name}" do + expect{@client.user_timeline("sferik")}.to raise_error exception + end + end + end + + context "when HTTP status is #{status} and body is errors" do + context "when errors is an array of hashes" do + context "when error code is nil" do + before do + body_message = '{"errors":[{"message":"Client Error"}]}' + stub_get("/1.1/statuses/user_timeline.json").with(:query => {:screen_name => "sferik"}).to_return(:status => status, :body => body_message) + end + it "raises #{exception.name}" do + expect{@client.user_timeline("sferik")}.to raise_error { |error| + expect(error.code).to eq nil + } + end + context "when error code is 187" do + before do + body_message = '{"errors":[{"message":"Client Error","code": 187 }]}' + stub_get("/1.1/statuses/user_timeline.json").with(:query => {:screen_name => "sferik"}).to_return(:status => status, :body => body_message) + end + it "raises #{exception.name}" do + expect{@client.user_timeline("sferik")}.to raise_error { |error| + expect(error.code).to eq 187 + } + end + end + end + end + end + end + end