schema-client
Advanced tools
Comparing version 2.1.3 to 2.2.0
@@ -146,2 +146,10 @@ /** | ||
// Resolve data as promised | ||
var promises = this.promisifyData(data); | ||
if (promises.length) { | ||
return Promise.all(promises).bind(this).then(function() { | ||
this.request(method, url, data, callback); | ||
}); | ||
} | ||
// Prepare url and data for request | ||
@@ -191,2 +199,43 @@ url = url && url.toString ? url.toString() : ''; | ||
/** | ||
* Resolve and return promises array from data | ||
* Only resolve top level object keys | ||
* | ||
* @param object data | ||
* @return array | ||
*/ | ||
Client.prototype.promisifyData = function(data) { | ||
if (!data) { | ||
return []; | ||
} | ||
function thenResolvePromisedValue(data, key) { | ||
data[key].then(function(val) { | ||
data[key] = val; | ||
}); | ||
} | ||
var promises = []; | ||
if (typeof data === 'object') { | ||
var keys = Object.keys(data); | ||
for (var i = 0; i < keys.length; i++) { | ||
var key = keys[i]; | ||
if (data[key] && data[key].then) { | ||
promises.push(data[key]); | ||
thenResolvePromisedValue(data, key); | ||
} | ||
} | ||
} else if (data instanceof Array) { | ||
for (var i = 0; i < data.length; i++) { | ||
if (data[i] && data[i].then) { | ||
promises.push(data[i]); | ||
thenResolvePromisedValue(data, i); | ||
} | ||
} | ||
} | ||
return promises; | ||
}; | ||
/** | ||
* Client response handler | ||
@@ -193,0 +242,0 @@ * |
{ | ||
"name": "schema-client", | ||
"version": "2.1.3", | ||
"version": "2.2.0", | ||
"description": "Schema API Client for NodeJS", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -328,2 +328,32 @@ var assert = require('chai').assert; | ||
}); | ||
it('resolves promised data (object)', function() { | ||
var data = { | ||
test1: Promise.resolve('hello'), | ||
test2: Promise.resolve('world'), | ||
test3: 'static' | ||
}; | ||
return client.request('get', 'url', data).then(function() { | ||
assert.deepEqual(serverRequestStub.args[0][2].$data, { | ||
test1: 'hello', | ||
test2: 'world', | ||
test3: 'static' | ||
}); | ||
}); | ||
}); | ||
it('resolves promised data (array)', function() { | ||
var data = [ | ||
Promise.resolve('hello'), | ||
Promise.resolve('world'), | ||
'static' | ||
]; | ||
return client.request('get', 'url', data).then(function() { | ||
assert.deepEqual(serverRequestStub.args[0][2].$data, [ | ||
'hello', 'world', 'static' | ||
]); | ||
}); | ||
}); | ||
}); | ||
@@ -548,2 +578,2 @@ | ||
}); | ||
}); | ||
}); |
Sorry, the diff of this file is too big to display
98208
2957