Skip to content

Commit fc7ebb8

Browse files
stephenpluspluscallmehiphop
authored andcommitted
translate: support GOOGLE_CLOUD_TRANSLATE_ENDPOINT env var (#1674)
1 parent 2ad1ae4 commit fc7ebb8

File tree

2 files changed

+59
-12
lines changed

2 files changed

+59
-12
lines changed

packages/translate/src/index.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ var PKG = require('../package.json');
5353
*
5454
* @param {object} options - [Configuration object](#/docs).
5555
* @param {string} options.key - An API key.
56+
*
57+
* @example
58+
* //-
59+
* // <h3>Custom Translate API</h3>
60+
* //
61+
* // The environment variable, `GOOGLE_CLOUD_TRANSLATE_ENDPOINT`, is honored as
62+
* // a custom backend which our library will send requests to.
63+
* //-
5664
*/
5765
function Translate(options) {
5866
if (!(this instanceof Translate)) {
@@ -66,6 +74,13 @@ function Translate(options) {
6674
throw new Error('An API key is required to use the Translate API.');
6775
}
6876

77+
this.baseUrl = 'https://www.googleapis.com/language/translate/v2';
78+
79+
if (process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT) {
80+
this.baseUrl = process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT
81+
.replace(/\/+$/, '');
82+
}
83+
6984
this.options = options;
7085
this.key = options.key;
7186
}
@@ -382,9 +397,7 @@ Translate.prototype.translate = function(input, options, callback) {
382397
* @param {function} callback - The callback function passed to `request`.
383398
*/
384399
Translate.prototype.request = function(reqOpts, callback) {
385-
var BASE_URL = 'https://www.googleapis.com/language/translate/v2';
386-
387-
reqOpts.uri = BASE_URL + reqOpts.uri;
400+
reqOpts.uri = this.baseUrl + reqOpts.uri;
388401

389402
reqOpts = extend(true, {}, reqOpts, {
390403
qs: {

packages/translate/test/index.js

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ var fakeUtil = extend({}, util, {
3333
});
3434

3535
describe('Translate', function() {
36-
var API_KEY = 'api-key';
36+
var OPTIONS = {
37+
key: 'api-key'
38+
};
3739

3840
var Translate;
3941
var translate;
@@ -49,16 +51,14 @@ describe('Translate', function() {
4951
beforeEach(function() {
5052
makeRequestOverride = null;
5153

52-
translate = new Translate({
53-
key: API_KEY
54-
});
54+
translate = new Translate(OPTIONS);
5555
});
5656

5757
describe('instantiation', function() {
5858
it('should normalize the arguments', function() {
5959
var normalizeArguments = fakeUtil.normalizeArguments;
6060
var normalizeArgumentsCalled = false;
61-
var fakeOptions = { key: API_KEY };
61+
var fakeOptions = extend({}, OPTIONS);
6262
var fakeContext = {};
6363

6464
fakeUtil.normalizeArguments = function(context, options, cfg) {
@@ -81,14 +81,48 @@ describe('Translate', function() {
8181
}, /An API key is required to use the Translate API\./);
8282
});
8383

84+
it('should default baseUrl correctly', function() {
85+
assert.strictEqual(
86+
translate.baseUrl,
87+
'https://www.googleapis.com/language/translate/v2'
88+
);
89+
});
90+
8491
it('should localize the options', function() {
85-
var options = { key: API_KEY };
92+
var options = { key: '...' };
8693
var translate = new Translate(options);
8794
assert.strictEqual(translate.options, options);
8895
});
8996

9097
it('should localize the api key', function() {
91-
assert.equal(translate.key, API_KEY);
98+
assert.equal(translate.key, OPTIONS.key);
99+
});
100+
101+
describe('GOOGLE_CLOUD_TRANSLATE_ENDPOINT', function() {
102+
var CUSTOM_ENDPOINT = '...';
103+
var translate;
104+
105+
before(function() {
106+
process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT = CUSTOM_ENDPOINT;
107+
translate = new Translate(OPTIONS);
108+
});
109+
110+
after(function() {
111+
delete process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT;
112+
});
113+
114+
it('should correctly set the baseUrl', function() {
115+
assert.strictEqual(translate.baseUrl, CUSTOM_ENDPOINT);
116+
});
117+
118+
it('should remove trailing slashes', function() {
119+
var expectedBaseUrl = 'http://localhost:8080';
120+
121+
process.env.GOOGLE_CLOUD_TRANSLATE_ENDPOINT = 'http://localhost:8080//';
122+
123+
var translate = new Translate(OPTIONS);
124+
assert.strictEqual(translate.baseUrl, expectedBaseUrl);
125+
});
92126
});
93127
});
94128

@@ -446,8 +480,8 @@ describe('Translate', function() {
446480
'User-Agent': userAgent
447481
}
448482
});
449-
var BASE_URL = 'https://www.googleapis.com/language/translate/v2';
450-
expectedReqOpts.uri = BASE_URL + reqOpts.uri;
483+
484+
expectedReqOpts.uri = translate.baseUrl + reqOpts.uri;
451485

452486
makeRequestOverride = function(reqOpts, options, callback) {
453487
assert.deepEqual(reqOpts, expectedReqOpts);

0 commit comments

Comments
 (0)