From 4f113a28588f9f60cf6ab5426ad89ef160be1e21 Mon Sep 17 00:00:00 2001 From: Jerry Li Date: Tue, 24 Nov 2020 18:12:51 +1100 Subject: [PATCH 1/3] Support referer for Google API key restriction --- lib/easy_translate.rb | 1 + lib/easy_translate/request.rb | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/easy_translate.rb b/lib/easy_translate.rb index be27d93..6657b19 100644 --- a/lib/easy_translate.rb +++ b/lib/easy_translate.rb @@ -16,6 +16,7 @@ module EasyTranslate class << self attr_accessor :api_key + attr_accessor :referer # for Google API key referer restriction end end diff --git a/lib/easy_translate/request.rb b/lib/easy_translate/request.rb index 7187b68..e907bb0 100644 --- a/lib/easy_translate/request.rb +++ b/lib/easy_translate/request.rb @@ -28,7 +28,7 @@ def path # @return [Hash] a hash of the base parameters for any request def params params = {} - params[:key] = EasyTranslate.api_key if EasyTranslate.api_key + params[:key] = EasyTranslate.api_key if EasyTranslate.api_key.present? params[:prettyPrint] = 'false' # eliminate unnecessary overhead params end @@ -37,7 +37,7 @@ def params # @return [String] The response String def perform_raw # Construct the request - request = Net::HTTP::Post.new(uri.request_uri) + request = Net::HTTP::Post.new(uri.request_uri, { 'Referer' => EasyTranslate.referer }) request.add_field('X-HTTP-Method-Override', 'GET') request.body = body # Fire and return From 4c148eccd9aa3a9ea50927743fb2d06f404a889b Mon Sep 17 00:00:00 2001 From: Jerry Li Date: Tue, 24 Nov 2020 18:20:54 +1100 Subject: [PATCH 2/3] add_field --- lib/easy_translate/request.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/easy_translate/request.rb b/lib/easy_translate/request.rb index e907bb0..e1a5829 100644 --- a/lib/easy_translate/request.rb +++ b/lib/easy_translate/request.rb @@ -37,7 +37,8 @@ def params # @return [String] The response String def perform_raw # Construct the request - request = Net::HTTP::Post.new(uri.request_uri, { 'Referer' => EasyTranslate.referer }) + request = Net::HTTP::Post.new(uri.request_uri) + request.add_field('Referer', EasyTranslate.referer) request.add_field('X-HTTP-Method-Override', 'GET') request.body = body # Fire and return From d906427e07207b936281dafa8c6516d19175d556 Mon Sep 17 00:00:00 2001 From: Jerry Li Date: Tue, 24 Nov 2020 19:12:22 +1100 Subject: [PATCH 3/3] Specs --- lib/easy_translate/request.rb | 16 ++++++++++------ spec/examples/request_spec.rb | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/easy_translate/request.rb b/lib/easy_translate/request.rb index e1a5829..6fed7a3 100644 --- a/lib/easy_translate/request.rb +++ b/lib/easy_translate/request.rb @@ -28,7 +28,7 @@ def path # @return [Hash] a hash of the base parameters for any request def params params = {} - params[:key] = EasyTranslate.api_key if EasyTranslate.api_key.present? + params[:key] = EasyTranslate.api_key if EasyTranslate.api_key params[:prettyPrint] = 'false' # eliminate unnecessary overhead params end @@ -37,12 +37,12 @@ def params # @return [String] The response String def perform_raw # Construct the request - request = Net::HTTP::Post.new(uri.request_uri) - request.add_field('Referer', EasyTranslate.referer) - request.add_field('X-HTTP-Method-Override', 'GET') - request.body = body + raw_request.add_field('Referer', EasyTranslate.referer) + raw_request.add_field('X-HTTP-Method-Override', 'GET') + raw_request.body = body + # Fire and return - response = http.request(request) + response = http.request(raw_request) unless response.code == '200' err = JSON.parse(response.body)['error']['errors'].first['message'] raise EasyTranslateException.new(err) @@ -50,6 +50,10 @@ def perform_raw response.body end + def raw_request + @raw_request ||= Net::HTTP::Post.new(uri.request_uri) + end + private def uri diff --git a/spec/examples/request_spec.rb b/spec/examples/request_spec.rb index 3c7fd44..d298fa6 100644 --- a/spec/examples/request_spec.rb +++ b/spec/examples/request_spec.rb @@ -2,6 +2,24 @@ describe EasyTranslate::Request do + describe :perform_raw do + let(:referer) { 'https://example.com' } + let(:request) { EasyTranslate::Request.new } + + before do + EasyTranslate.referer = referer + + allow(request).to receive(:path).and_return('') + end + + it 'should set headers' do + expect(request.raw_request).to receive(:add_field).once.ordered.with('Referer', EasyTranslate.referer) + expect(request.raw_request).to receive(:add_field).once.ordered.with('X-HTTP-Method-Override', 'GET') + expect { request.perform_raw }.to raise_error JSON::ParserError + end + + end + describe :path do it 'should raise a NotImplementedError on this base class' do