diff --git a/packages/language/src/index.js b/packages/language/src/index.js index ff718674a86..00bbe851b12 100644 --- a/packages/language/src/index.js +++ b/packages/language/src/index.js @@ -26,6 +26,11 @@ var is = require('is'); var v1 = require('./v1'); var v1beta2 = require('./v1beta2'); +var GAPIC_APIS = { + v1: v1, + v1beta2: v1beta2 +}; + /** * @type {module:language/document} * @private @@ -51,6 +56,10 @@ var Document = require('./document.js'); * @resource [Cloud Natural Language API Documentation]{@link https://cloud.google.com/natural-language/docs} * * @param {object} options - [Configuration object](#/docs). + * @param {string} options.apiVersion - Either `v1` or `v1beta2`. `v1beta2` is a + * *newer* release than `v1`, and still in beta. By choosing it, you are + * opting into new, back-end behavior which is not officially supported by + * the design of this API. (Default: `v1`) */ function Language(options) { if (!(this instanceof Language)) { @@ -63,8 +72,16 @@ function Language(options) { libVersion: require('../package.json').version }); + var gapic = GAPIC_APIS[options.apiVersion || 'v1']; + + if (!gapic) { + throw new Error('Invalid `apiVersion` specified. Use "v1" or "v1beta2".'); + } + + delete options.apiVersion; + this.api = { - Language: v1(options).languageServiceClient(options) + Language: gapic(options).languageServiceClient(options) }; } diff --git a/packages/language/test/index.js b/packages/language/test/index.js index e9658ade128..45237e97caa 100644 --- a/packages/language/test/index.js +++ b/packages/language/test/index.js @@ -48,6 +48,17 @@ function fakeV1() { }; } +var fakeV1Beta2Override; +function fakeV1Beta2() { + if (fakeV1Beta2Override) { + return fakeV1Beta2Override.apply(null, arguments); + } + + return { + languageServiceClient: util.noop + }; +} + describe('Language', function() { var Language; var language; @@ -60,12 +71,14 @@ describe('Language', function() { util: fakeUtil }, './document.js': FakeDocument, - './v1': fakeV1 + './v1': fakeV1, + './v1beta2': fakeV1Beta2 }); }); beforeEach(function() { fakeV1Override = null; + fakeV1Beta2Override = null; language = new Language(OPTIONS); }); @@ -123,6 +136,45 @@ describe('Language', function() { Language: expectedLanguageService }); }); + + it('should create a gax api client for v1beta2', function() { + var expectedLanguageService = {}; + + fakeV1Override = function() { + throw new Error('v1 should not be initialized.'); + }; + + fakeV1Beta2Override = function(options) { + var expected = { + libName: 'gccl', + libVersion: require('../package.json').version + }; + assert.deepStrictEqual(options, expected); + + return { + languageServiceClient: function(options) { + assert.deepStrictEqual(options, expected); + return expectedLanguageService; + } + }; + }; + + var language = new Language({ + apiVersion: 'v1beta2' + }); + + assert.deepEqual(language.api, { + Language: expectedLanguageService + }); + }); + + it('should not accept an unrecognized version', function() { + assert.throws(function() { + new Language({ + apiVersion: 'v1beta42' + }); + }, new RegExp('Invalid `apiVersion` specified. Use "v1" or "v1beta2".')); + }); }); describe('annotate', function() {