From d064e895dff4083a9928efb7eabab8122d09391f Mon Sep 17 00:00:00 2001 From: Stephen Sawchuk Date: Thu, 6 Oct 2016 12:32:11 -0400 Subject: [PATCH 1/2] translate: support GOOGLE_CLOUD_TRANSLATE_ENDPOINT env var --- packages/translate/src/index.js | 11 +++++-- packages/translate/test/index.js | 52 ++++++++++++++++++++++++++------ 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/packages/translate/src/index.js b/packages/translate/src/index.js index 6c58cb730ff..fc354462a0b 100644 --- a/packages/translate/src/index.js +++ b/packages/translate/src/index.js @@ -66,6 +66,13 @@ function Translate(options) { throw new Error('An API key is required to use the Translate API.'); } + this.baseUrl = 'https://www.googleapis.com/language/translate/v2'; + + if (process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT) { + this.baseUrl = process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT + .replace(/\/+$/, ''); + } + this.options = options; this.key = options.key; } @@ -382,9 +389,7 @@ Translate.prototype.translate = function(input, options, callback) { * @param {function} callback - The callback function passed to `request`. */ Translate.prototype.request = function(reqOpts, callback) { - var BASE_URL = 'https://www.googleapis.com/language/translate/v2'; - - reqOpts.uri = BASE_URL + reqOpts.uri; + reqOpts.uri = this.baseUrl + reqOpts.uri; reqOpts = extend(true, {}, reqOpts, { qs: { diff --git a/packages/translate/test/index.js b/packages/translate/test/index.js index c4f0d814bf9..b0a3470211e 100644 --- a/packages/translate/test/index.js +++ b/packages/translate/test/index.js @@ -33,7 +33,9 @@ var fakeUtil = extend({}, util, { }); describe('Translate', function() { - var API_KEY = 'api-key'; + var OPTIONS = { + key: 'api-key' + }; var Translate; var translate; @@ -49,16 +51,14 @@ describe('Translate', function() { beforeEach(function() { makeRequestOverride = null; - translate = new Translate({ - key: API_KEY - }); + translate = new Translate(OPTIONS); }); describe('instantiation', function() { it('should normalize the arguments', function() { var normalizeArguments = fakeUtil.normalizeArguments; var normalizeArgumentsCalled = false; - var fakeOptions = { key: API_KEY }; + var fakeOptions = extend({}, OPTIONS); var fakeContext = {}; fakeUtil.normalizeArguments = function(context, options, cfg) { @@ -81,14 +81,48 @@ describe('Translate', function() { }, /An API key is required to use the Translate API\./); }); + it('should default baseUrl correctly', function() { + assert.strictEqual( + translate.baseUrl, + 'https://www.googleapis.com/language/translate/v2' + ); + }); + it('should localize the options', function() { - var options = { key: API_KEY }; + var options = { key: '...' }; var translate = new Translate(options); assert.strictEqual(translate.options, options); }); it('should localize the api key', function() { - assert.equal(translate.key, API_KEY); + assert.equal(translate.key, OPTIONS.key); + }); + + describe('GOOGLE_CLOUD_TRANSLATE_ENDPOINT', function() { + var CUSTOM_ENDPOINT = '...'; + var translate; + + before(function() { + process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT = CUSTOM_ENDPOINT; + translate = new Translate(OPTIONS); + }); + + after(function() { + delete process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT; + }); + + it('should correctly set the baseUrl', function() { + assert.strictEqual(translate.baseUrl, CUSTOM_ENDPOINT); + }); + + it('should remove trailing slashes', function() { + var expectedBaseUrl = 'http://localhost:8080'; + + process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT = 'http://localhost:8080//'; + + var translate = new Translate(OPTIONS); + assert.strictEqual(translate.baseUrl, expectedBaseUrl); + }); }); }); @@ -446,8 +480,8 @@ describe('Translate', function() { 'User-Agent': userAgent } }); - var BASE_URL = 'https://www.googleapis.com/language/translate/v2'; - expectedReqOpts.uri = BASE_URL + reqOpts.uri; + + expectedReqOpts.uri = translate.baseUrl + reqOpts.uri; makeRequestOverride = function(reqOpts, options, callback) { assert.deepEqual(reqOpts, expectedReqOpts); From 16480fbd5372459ee3f39b3f83560b10b281ee1b Mon Sep 17 00:00:00 2001 From: Stephen Sawchuk Date: Thu, 6 Oct 2016 15:11:15 -0400 Subject: [PATCH 2/2] docs --- packages/translate/src/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/translate/src/index.js b/packages/translate/src/index.js index fc354462a0b..03259af202b 100644 --- a/packages/translate/src/index.js +++ b/packages/translate/src/index.js @@ -53,6 +53,14 @@ var PKG = require('../package.json'); * * @param {object} options - [Configuration object](#/docs). * @param {string} options.key - An API key. + * + * @example + * //- + * //

Custom Translate API

+ * // + * // The environment variable, `GOOGLE_CLOUD_TRANSLATE_ENDPOINT`, is honored as + * // a custom backend which our library will send requests to. + * //- */ function Translate(options) { if (!(this instanceof Translate)) {