Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions lib/google_fish.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
22 changes: 19 additions & 3 deletions spec/google_fish_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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') }
Expand All @@ -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

Expand Down
12 changes: 12 additions & 0 deletions spec/support/bad.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=UTF-8

<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Bad Request</H1>
<H2>Error 400</H2>
</BODY>
</HTML>