Merge remote-tracking branch 'origin/open931' into open-master

This commit is contained in:
bwyu 2015-03-17 11:05:45 -07:00
commit 828f82a3e7
3 changed files with 14 additions and 19 deletions

View File

@ -157,8 +157,7 @@
}, },
{ {
"key": "mutation", "key": "mutation",
"implementation": "capabilities/MutationCapability.js", "implementation": "capabilities/MutationCapability.js"
"depends": [ "$q" ]
}, },
{ {
"key": "delegation", "key": "delegation",

View File

@ -21,6 +21,16 @@ define(
}); });
} }
// Utility function to cast to a promise, without waiting
// for nextTick if a value is non-promise-like.
function fastPromise(value) {
return (value || {}).then ? value : {
then: function (callback) {
return fastPromise(callback(value));
}
};
}
/** /**
* The `mutation` capability allows a domain object's model to be * The `mutation` capability allows a domain object's model to be
* modified. Wrapping such modifications in calls made through * modified. Wrapping such modifications in calls made through
@ -36,12 +46,11 @@ define(
* }); * });
* ``` * ```
* *
* @param $q Angular's $q service, for promises
* @param {DomainObject} domainObject the domain object * @param {DomainObject} domainObject the domain object
* which will expose this capability * which will expose this capability
* @constructor * @constructor
*/ */
function MutationCapability($q, domainObject) { function MutationCapability(domainObject) {
function mutate(mutator) { function mutate(mutator) {
// Get the object's model and clone it, so the // Get the object's model and clone it, so the
@ -73,8 +82,7 @@ define(
// Invoke the provided mutator, then make changes to // Invoke the provided mutator, then make changes to
// the underlying model (if applicable.) // the underlying model (if applicable.)
return $q.when(mutator(clone)) return fastPromise(mutator(clone)).then(handleMutation);
.then(handleMutation);
} }
return { return {

View File

@ -13,21 +13,9 @@ define(
domainObject = { getModel: function () { return testModel; } }, domainObject = { getModel: function () { return testModel; } },
mutation; mutation;
function mockPromise(value) {
return {
then: function (callback) {
return (value && value.then) ?
value : mockPromise(callback(value));
}
};
}
beforeEach(function () { beforeEach(function () {
testModel = { number: 6 }; testModel = { number: 6 };
mutation = new MutationCapability( mutation = new MutationCapability(domainObject);
{ when: mockPromise }, // $q
domainObject
);
}); });
it("allows mutation of a model", function () { it("allows mutation of a model", function () {