diff --git a/bundles.json b/bundles.json index ed42240882..8da51c03ac 100644 --- a/bundles.json +++ b/bundles.json @@ -13,6 +13,7 @@ "platform/features/scrolling", "platform/forms", "platform/persistence/cache", + "platform/persistence/queue", "platform/persistence/elastic", "example/generator" diff --git a/platform/persistence/elastic/src/ElasticPersistenceProvider.js b/platform/persistence/elastic/src/ElasticPersistenceProvider.js index e8ea1d0e0f..9c4ab35fc1 100644 --- a/platform/persistence/elastic/src/ElasticPersistenceProvider.js +++ b/platform/persistence/elastic/src/ElasticPersistenceProvider.js @@ -38,8 +38,8 @@ define( data: value }).then(function (response) { return response.data; - }, function () { - return undefined; + }, function (response) { + return (response || {}).data; }); } @@ -91,7 +91,7 @@ define( function checkResponse(response, key) { var error; if (response && !response.error) { - revs[ID] = response[REV]; + revs[key] = response[REV]; return response; } else { return handleError(response, key); diff --git a/platform/persistence/queue/src/PersistenceQueue.js b/platform/persistence/queue/src/PersistenceQueue.js index 251643c3d4..f3d2def1d5 100644 --- a/platform/persistence/queue/src/PersistenceQueue.js +++ b/platform/persistence/queue/src/PersistenceQueue.js @@ -39,6 +39,7 @@ define( ) { // Wire up injected dependencies return new PersistenceQueueImpl( + $q, $timeout, new PersistenceQueueHandler( $q, diff --git a/platform/persistence/queue/src/PersistenceQueueImpl.js b/platform/persistence/queue/src/PersistenceQueueImpl.js index 3ab4edb25c..2f7edbd20e 100644 --- a/platform/persistence/queue/src/PersistenceQueueImpl.js +++ b/platform/persistence/queue/src/PersistenceQueueImpl.js @@ -21,12 +21,13 @@ define( * @param {number} [DELAY] optional; delay in milliseconds between * attempts to flush the queue */ - function PersistenceQueueImpl($timeout, handler, DELAY) { + function PersistenceQueueImpl($q, $timeout, handler, DELAY) { var queue = {}, objects = {}, lastObservedSize = 0, pendingTimeout, - flushPromise; + flushPromise, + activeDefer = $q.defer(); // Check if the queue's size has stopped increasing) function quiescent() { @@ -39,8 +40,9 @@ define( flushPromise = handler.persist(queue, objects); // When persisted, clear the active promise - flushPromise.then(function () { + flushPromise.then(function (value) { flushPromise = undefined; + activeDefer.resolve(value); }); // Reset queue, etc. @@ -48,14 +50,19 @@ define( objects = {}; lastObservedSize = 0; pendingTimeout = undefined; + activeDefer = $q.defer(); } // Schedule a flushing of the queue (that is, plan to flush // all objects in the queue) function scheduleFlush() { function maybeFlush() { + // Timeout fired, so clear it + pendingTimeout = undefined; // Only flush when we've stopped receiving updates (quiescent() ? flush : scheduleFlush)(); + // Update lastObservedSize to detect quiescence + lastObservedSize = Object.keys(queue).length; } // If we are already flushing the queue... @@ -68,6 +75,8 @@ define( pendingTimeout = pendingTimeout || $timeout(maybeFlush, DELAY, false); } + + return activeDefer.promise; } // If no delay is provided, use a default @@ -84,7 +93,7 @@ define( var id = domainObject.getId(); queue[id] = persistence; objects[id] = domainObject; - scheduleFlush(); + return scheduleFlush(); } }; } diff --git a/platform/persistence/queue/src/QueuingPersistenceCapability.js b/platform/persistence/queue/src/QueuingPersistenceCapability.js index abbc94c171..a4d94a4acc 100644 --- a/platform/persistence/queue/src/QueuingPersistenceCapability.js +++ b/platform/persistence/queue/src/QueuingPersistenceCapability.js @@ -15,12 +15,11 @@ define( * the capability */ function QueuingPersistenceCapability(queue, persistence, domainObject) { - var queuingPersistence = Object.create(persistence), - id = domainObject.getId(); + var queuingPersistence = Object.create(persistence); // Override persist calls to queue them instead queuingPersistence.persist = function () { - queue.put(id, persistence); + return queue.put(domainObject, persistence); }; return queuingPersistence; diff --git a/platform/persistence/queue/src/QueuingPersistenceCapabilityDecorator.js b/platform/persistence/queue/src/QueuingPersistenceCapabilityDecorator.js index cb658ad083..40d0f0c470 100644 --- a/platform/persistence/queue/src/QueuingPersistenceCapabilityDecorator.js +++ b/platform/persistence/queue/src/QueuingPersistenceCapabilityDecorator.js @@ -43,8 +43,9 @@ define( } function getCapabilities(model) { - return capabilityService.getCapabilities(model) - .then(decoratePersistence); + return decoratePersistence( + capabilityService.getCapabilities(model) + ); } return {