Comparing version 0.21.0 to 0.22.0
@@ -71,4 +71,13 @@ /** | ||
if (opts.promisify) { | ||
this._promisify(opts.promisify); | ||
try { | ||
if (opts.promisify) { | ||
if (typeof opts.promisify === 'function') { | ||
papi.tools.promisify(this, opts.promisify); | ||
} else { | ||
papi.tools.promisify(this); | ||
} | ||
} | ||
} catch (err) { | ||
err.message = 'promisify: ' + err.message; | ||
throw err; | ||
} | ||
@@ -122,82 +131,7 @@ } | ||
Consul.walk = Consul.prototype.walk = function(obj, name, tree) { | ||
if (arguments.length !== 3) { | ||
obj = Consul; | ||
name = 'Consul'; | ||
tree = { name: name }; | ||
} | ||
Object.keys(obj.prototype).forEach(function(key) { | ||
var v = obj.prototype[key]; | ||
if (!key.match(/^[a-z]+/)) return; | ||
if (!tree.methods) tree.methods = {}; | ||
tree.methods[key] = { | ||
name: key, | ||
value: v, | ||
}; | ||
var meta = obj.meta || {}; | ||
tree.methods[key].type = meta[key] && meta[key].type || 'callback'; | ||
}); | ||
Object.keys(obj).forEach(function(key) { | ||
var v = obj[key]; | ||
if (!key.match(/^[A-Z]+/)) return; | ||
if (!tree.objects) tree.objects = {}; | ||
tree.objects[key] = { | ||
name: key, | ||
value: v, | ||
}; | ||
Consul.walk(v, key, tree.objects[key]); | ||
}); | ||
return tree; | ||
Consul.walk = Consul.prototype.walk = function() { | ||
return papi.tools.walk(Consul); | ||
}; | ||
/** | ||
* Inject promises | ||
*/ | ||
Consul.prototype._promisify = function(promisify) { | ||
if (typeof promisify !== 'function') { | ||
throw new Error('promisify must be a function'); | ||
} | ||
var patch = function(client, tree) { | ||
Object.keys(tree.methods).forEach(function(key) { | ||
var method = tree.methods[key]; | ||
var fn = client[method.name]; | ||
if (method.type === 'callback') { | ||
client[method.name] = function() { | ||
if (typeof arguments[arguments.length - 1] === 'function') { | ||
return fn.apply(client, arguments); | ||
} | ||
var args = Array.prototype.slice.call(arguments); | ||
return promisify(function(callback) { | ||
args.push(callback); | ||
return fn.apply(client, args); | ||
}); | ||
}; | ||
} | ||
}); | ||
if (tree.objects) { | ||
Object.keys(tree.objects).forEach(function(key) { | ||
patch(client[key.toLowerCase()], tree.objects[key]); | ||
}); | ||
} | ||
}; | ||
patch(this, this.walk()); | ||
}; | ||
/** | ||
* Module exports. | ||
@@ -204,0 +138,0 @@ */ |
@@ -23,2 +23,8 @@ /** | ||
/** | ||
* Object meta | ||
*/ | ||
Kv.meta = {}; | ||
/** | ||
* Get | ||
@@ -182,2 +188,4 @@ */ | ||
Kv.meta.delete = { type: 'alias' }; | ||
Kv.prototype.delete = Kv.prototype.del; | ||
@@ -184,0 +192,0 @@ |
{ | ||
"name": "consul", | ||
"version": "0.21.0", | ||
"version": "0.22.0", | ||
"description": "Consul client", | ||
"main": "./lib", | ||
"dependencies": { | ||
"papi": "^0.24.0" | ||
"papi": "^0.25.0" | ||
}, | ||
@@ -9,0 +9,0 @@ "devDependencies": { |
@@ -13,2 +13,5 @@ # Consul [![Build Status](https://travis-ci.org/silas/node-consul.png?branch=master)](https://travis-ci.org/silas/node-consul) | ||
* [Consul](#init) | ||
* [Callback](#callback) | ||
* [Promise](#promise) | ||
* [Common Options](#common-options) | ||
* [ACL](#acl) | ||
@@ -41,3 +44,3 @@ * [Agent](#agent) | ||
* defaults (Object, optional): default options for method calls | ||
* promisify (Function, optional): wrap callback methods to return a Promise, see [promisify](#promisify) | ||
* promisify (Boolean|Function, optional): convert callback methods to Promises | ||
@@ -59,5 +62,12 @@ Usage | ||
<a name="common-method-options"></a> | ||
### Common Method Options | ||
<a name="promise"></a> | ||
### Promise | ||
Promise support can be enabled by setting `promisify` to `true` in Node `>= 0.12` or passing a wrapper (ex: `bluebird.fromCallback`) in older versions. | ||
If you need access to the `res` object you can create a custom wrapper ([see example below](#promise-wrapper). | ||
<a name="common-options"></a> | ||
### Common Options | ||
These options will be passed along with any method call, although only certain endpoints support them. See the [HTTP API][consul-docs-api] for more information. | ||
@@ -1578,16 +1588,30 @@ | ||
<a name="promisify"></a> | ||
### Promisify | ||
<a name="promise-wrapper"></a> | ||
### Promise Wrapper | ||
_Experimental_ | ||
``` javascript | ||
var Bluebird = require('bluebird'); | ||
Wrap callback methods using the `promisify` option in [Consul](#init). | ||
function fromCallback(fn) { | ||
return new Bluebird(function(resolve, reject) { | ||
try { | ||
return fn(function(err, data, res) { | ||
if (err) { | ||
err.res = res; | ||
return reject(err); | ||
} | ||
return resolve([data, res]); | ||
}); | ||
} catch (err) { | ||
return reject(err); | ||
} | ||
}); | ||
} | ||
``` javascript | ||
var bluebird = require('bluebird'); | ||
var consul = require('consul')({ promisify: bluebird.fromCallback }); | ||
var consul = require('consul')({ promisify: fromCallback }); | ||
consul.kv.set('test', 'hello world').then(function() { | ||
consul.kv.keys().then(function(data) { | ||
consul.kv.keys().spread(function(data, res) { | ||
console.log('data:', data); | ||
console.log('headers:', res.headers); | ||
}); | ||
@@ -1594,0 +1618,0 @@ }); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
25
1651
102089
2087
+ Addedpapi@0.25.1(transitive)
- Removedpapi@0.24.0(transitive)
Updatedpapi@^0.25.0