From 988a7c4a2314ea58f98069d29f62a2fa3da9251e Mon Sep 17 00:00:00 2001 From: Dave Gramlich Date: Mon, 17 Oct 2016 19:40:05 -0400 Subject: [PATCH] translate: add promise support --- packages/translate/README.md | 10 ++++++++++ packages/translate/package.json | 2 +- packages/translate/src/index.js | 33 ++++++++++++++++++++++++++++++-- packages/translate/test/index.js | 10 ++++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/packages/translate/README.md b/packages/translate/README.md index 759c8c55f58..1dd0bd1f568 100644 --- a/packages/translate/README.md +++ b/packages/translate/README.md @@ -46,6 +46,16 @@ translate.getLanguages(function(err, languages) { // ] } }); + +// Promises are also supported by omitting callbacks. +translate.getLanguages().then(function(data) { + var languages = data[0]; +}); + +// It's also possible to integrate with third-party Promise libraries. +var translate = require('@google-cloud/translate')({ + promise: require('bluebird') +}); ``` diff --git a/packages/translate/package.json b/packages/translate/package.json index 88b48402079..125d8f6d17f 100644 --- a/packages/translate/package.json +++ b/packages/translate/package.json @@ -50,7 +50,7 @@ "translate" ], "dependencies": { - "@google-cloud/common": "^0.6.0", + "@google-cloud/common": "^0.7.0", "arrify": "^1.0.0", "extend": "^3.0.0", "is": "^3.0.1", diff --git a/packages/translate/src/index.js b/packages/translate/src/index.js index 03259af202b..457a18540fb 100644 --- a/packages/translate/src/index.js +++ b/packages/translate/src/index.js @@ -101,8 +101,6 @@ function Translate(options) { * @param {number=} callback.results[].confidence - A float 0 - 1. The higher * the number, the higher the confidence in language detection. Note, this * is not always returned from the API. - * @param {string} callback.input - The original input that this was result was - * based on. * @param {object} callback.apiResponse - Raw API response. * * @example @@ -142,6 +140,14 @@ function Translate(options) { * // ] * } * }); + * + * //- + * // If the callback is omitted, we'll return a Promise. + * //- + * translate.detect('Hello').then(function(data) { + * var results = data[0]; + * var apiResponse = data[2]; + * }); */ Translate.prototype.detect = function(input, callback) { input = arrify(input); @@ -237,6 +243,14 @@ Translate.prototype.detect = function(input, callback) { * // ] * } * }); + * + * //- + * // If the callback is omitted, we'll return a Promise. + * //- + * translate.getLanguages().then(function(data) { + * var languages = data[0]; + * var apiResponse = data[1]; + * }); */ Translate.prototype.getLanguages = function(target, callback) { if (is.fn(target)) { @@ -340,6 +354,14 @@ Translate.prototype.getLanguages = function(target, callback) { * // ] * } * }); + * + * //- + * // If the callback is omitted, we'll return a Promise. + * //- + * translate.translate('Hello', 'es').then(function(data) { + * var translation = data[0]; + * var apiResponse = data[1]; + * }); */ Translate.prototype.translate = function(input, options, callback) { input = arrify(input); @@ -411,4 +433,11 @@ Translate.prototype.request = function(reqOpts, callback) { common.util.makeRequest(reqOpts, this.options, callback); }; +/*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + */ +common.util.promisifyAll(Translate); + module.exports = Translate; diff --git a/packages/translate/test/index.js b/packages/translate/test/index.js index b0a3470211e..76223bdf6cb 100644 --- a/packages/translate/test/index.js +++ b/packages/translate/test/index.js @@ -22,6 +22,7 @@ var proxyquire = require('proxyquire'); var util = require('@google-cloud/common').util; var makeRequestOverride; +var promisified = false; var fakeUtil = extend({}, util, { makeRequest: function() { if (makeRequestOverride) { @@ -29,6 +30,11 @@ var fakeUtil = extend({}, util, { } return util.makeRequest.apply(null, arguments); + }, + promisifyAll: function(Class) { + if (Class.name === 'Translate') { + promisified = true; + } } }); @@ -55,6 +61,10 @@ describe('Translate', function() { }); describe('instantiation', function() { + it('should promisify all the things', function() { + assert(promisified); + }); + it('should normalize the arguments', function() { var normalizeArguments = fakeUtil.normalizeArguments; var normalizeArgumentsCalled = false;