From 6978c23d3e150a3dd83ec37c534f80041a1477e4 Mon Sep 17 00:00:00 2001 From: Henry Poydar Date: Tue, 15 Jul 2014 18:34:17 -0400 Subject: [PATCH] Raise exception if there is a server error --- lib/randomuser.rb | 12 ++++++++---- lib/randomuser/version.rb | 2 +- randomuser.gemspec | 3 ++- test/all_test.rb | 6 ++++++ test/test_helper.rb | 3 +++ 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/randomuser.rb b/lib/randomuser.rb index 1d65db3..ed96ee7 100644 --- a/lib/randomuser.rb +++ b/lib/randomuser.rb @@ -21,20 +21,24 @@ def self.generate_seed(seed='') request("seed=#{seed}") end + class ApiError < Exception + end + private def self.api_url(query='') "http://api.randomuser.me/#{Randomuser::VERSION}/?#{query}" end - + def self.request(query='') uri = URI.parse(self.api_url(query)) http = Net::HTTP.new(uri.host, uri.port) http.start do |connection| - response = connection.send_request(:get, uri.request_uri) - response = JSON.parse(response.body, symbolize_names: true) - response[:results] + api_response = connection.send_request(:get, uri.request_uri) + response = JSON.parse(api_response.body, symbolize_names: true) + return response[:results] if response[:results] + raise Randomuser::ApiError, api_response.body end end diff --git a/lib/randomuser/version.rb b/lib/randomuser/version.rb index 41bb05d..c2a1b1a 100644 --- a/lib/randomuser/version.rb +++ b/lib/randomuser/version.rb @@ -1,3 +1,3 @@ module Randomuser - VERSION = '0.3.1' + VERSION = '0.3.2' end diff --git a/randomuser.gemspec b/randomuser.gemspec index a1f5326..cb89e2f 100644 --- a/randomuser.gemspec +++ b/randomuser.gemspec @@ -10,7 +10,7 @@ Gem::Specification.new do |gem| gem.authors = ['Dominic Giglio'] gem.email = ['humanshell@gmail.com'] gem.homepage = 'http://developr.me' - + #-- gem info gem.name = 'randomuser' gem.version = Randomuser::VERSION @@ -27,4 +27,5 @@ Gem::Specification.new do |gem| gem.add_development_dependency 'minitest' gem.add_development_dependency 'bundler', '~> 1.3' gem.add_development_dependency 'rake' + gem.add_development_dependency 'webmock', '~> 1.18.0' end diff --git a/test/all_test.rb b/test/all_test.rb index 11a341c..6604296 100644 --- a/test/all_test.rb +++ b/test/all_test.rb @@ -59,4 +59,10 @@ def test_generate_seed_returns_single_response assert_equal(response.length, 1) end + def test_generate_raises_error_on_server_error + stub_request(:get, "http://api.randomuser.me/#{Randomuser::VERSION}/"). + to_return(:status => 200, :body => '{"error":"Uh oh, something has gone wrong."}', :headers => {}) + assert_raises(Randomuser::ApiError) { Randomuser.send(:request) } + end + end diff --git a/test/test_helper.rb b/test/test_helper.rb index ff13e76..1dca5ad 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,6 +3,7 @@ gem 'minitest' require 'minitest/autorun' +require 'webmock/minitest' require 'randomuser' # override the generate methods so they return mock responses during testing @@ -56,4 +57,6 @@ def mock_response(gender='female') seed: "beautifulLeopard", version: "0.3.1" } + end +