diff --git a/lib/google_fish.rb b/lib/google_fish.rb index 4972089..48a52e6 100644 --- a/lib/google_fish.rb +++ b/lib/google_fish.rb @@ -58,8 +58,19 @@ def get http.verify_mode = OpenSSL::SSL::VERIFY_NONE req = Net::HTTP::Get.new(uri.request_uri) res = http.request(req) - raise GoogleFish::Request::ApiError unless res.code.to_i == 200 - res.body + + if res.code.to_i == 200 + return res.body + else + if res.content_type == "application/json" + message = JSON.parse(res.body) + else + re = /<("[^"]*"|'[^']*'|[^'">])*>/ + message = res.body.gsub!(re, "").gsub!("\n","") + end + + raise "GoogleFish::Request::ApiError : #{message}" + end end def parse diff --git a/spec/google_fish_spec.rb b/spec/google_fish_spec.rb index ca7bac0..ed166d9 100644 --- a/spec/google_fish_spec.rb +++ b/spec/google_fish_spec.rb @@ -88,7 +88,7 @@ end end - context "bad response" do + context "bad JSON response" do let(:query) { GoogleFish.new('key') } let(:request) { GoogleFish::Request.new(query) } let(:stubbed_response) { File.open('spec/support/bad.json') } @@ -99,8 +99,24 @@ to_return(stubbed_response) end - it "should raise an error if response is bad" do - expect { request.perform_translation }.to raise_error GoogleFish::Request::ApiError + it "should raise an error if JSON response is bad" do + expect { request.perform_translation }.to raise_error(RuntimeError, 'GoogleFish::Request::ApiError : {"error"=>{"errors"=>[{"domain"=>"global", "reason"=>"badRequest", "message"=>"Bad Request"}], "code"=>400, "message"=>"Bad Request"}}') + end + end + + context "bad HTML response" do + let(:query) { GoogleFish.new('key') } + let(:request) { GoogleFish::Request.new(query) } + let(:stubbed_response) { File.open('spec/support/bad.html') } + + before do + query.source, query.target, query.q = :en, :es, 'hello' + stub_request(:get, "https://www.googleapis.com/language/translate/v2?format=text&key=key&q=hello&source=en&target=es"). + to_return(stubbed_response) + end + + it "should raise an error if HTML response is bad" do + expect { request.perform_translation }.to raise_error(RuntimeError, 'GoogleFish::Request::ApiError : Bad RequestBad RequestError 400') end end diff --git a/spec/support/bad.html b/spec/support/bad.html new file mode 100644 index 0000000..15ab955 --- /dev/null +++ b/spec/support/bad.html @@ -0,0 +1,12 @@ +HTTP/1.1 400 Bad Request +Content-Type: text/html; charset=UTF-8 + + +
+