angular-cached-resource
Version:
An AngularJS module to interact with RESTful resources, even when browser is offline
78 lines (63 loc) • 2.37 kB
text/coffeescript
CACHE_RETRY_TIMEOUT = 60000 # one minute
ResourceCacheEntry = require './resource_cache_entry'
Cache = require './cache'
class ResourceWriteQueue
constructor: (, @$timeout) ->
= "#{@CachedResource.$key}/write"
= Cache.getItem(, [])
enqueue: (params, action, deferred) ->
entry = {params, action}
if not entry?
.push {params, action, deferred}
else
entry.deferred?.promise.then (response) ->
deferred.resolve response
entry.deferred?.promise.catch (error) ->
deferred.reject error
findEntry: ({action, params}) ->
for entry in
return entry if action is entry.action and angular.equals(params, entry.params)
removeEntry: ({action, params}) ->
newQueue = []
for entry in
newQueue.push entry unless action is entry.action and angular.equals(params, entry.params)
= newQueue
if .length is 0 and
@$timeout.cancel
delete
flush: ->
for entry in
processResource: (params, done) ->
notDone = true
for entry in
entry, =>
if notDone and .length is 0
notDone = false
done()
_entriesForResource: (params) ->
entry for entry in when angular.equals(params, entry.params)
_processEntry: (entry, done) ->
cacheEntry = new ResourceCacheEntry(.$key, entry.params)
onSuccess = (value) =>
entry
cacheEntry.setClean()
entry.deferred?.resolve value
done() if angular.isFunction(done)
onFailure = (error) =>
entry.deferred?.reject error
.$resource[entry.action](entry.params, cacheEntry.value, onSuccess, onFailure)
_setFlushTimeout: ->
if .length > 0 and not
= @$timeout angular.bind(@, ), CACHE_RETRY_TIMEOUT
.then =>
delete
_update: ->
savableQueue = .map (entry) ->
params: entry.params
action: entry.action
Cache.setItem , savableQueue
module.exports = ResourceWriteQueue