UNPKG

angular-cached-resource

Version:

An AngularJS module to interact with RESTful resources, even when browser is offline

69 lines (66 loc) 2.53 kB
// Generated by CoffeeScript 1.7.1 var modifyObjectInPlace, writeCache; modifyObjectInPlace = require('./modify_object_in_place'); module.exports = writeCache = function($q, providerParams, action, CachedResource) { var ResourceCacheEntry; ResourceCacheEntry = require('./resource_cache_entry')(providerParams); return function() { var args, cacheEntry, data, deferred, error, instanceMethod, isArray, param, params, queueDeferred, resource, success, value, wrapInCachedResource, _i, _len, _ref; instanceMethod = this instanceof CachedResource; args = Array.prototype.slice.call(arguments); params = !instanceMethod && angular.isObject(args[1]) ? args.shift() : instanceMethod && angular.isObject(args[0]) ? args.shift() : {}; data = instanceMethod ? this : args.shift(); success = args[0], error = args[1]; isArray = angular.isArray(data); wrapInCachedResource = function(object) { if (object instanceof CachedResource) { return object; } else { return new CachedResource(object); } }; if (isArray) { data = data.map(function(o) { return wrapInCachedResource(o); }); for (_i = 0, _len = data.length; _i < _len; _i++) { resource = data[_i]; cacheEntry = new ResourceCacheEntry(CachedResource.$key, resource.$params()).load(); if (!angular.equals(cacheEntry.data, resource)) { cacheEntry.set(resource, true); } } } else { data = wrapInCachedResource(data); _ref = data.$params(); for (param in _ref) { value = _ref[param]; params[param] = value; } cacheEntry = new ResourceCacheEntry(CachedResource.$key, data.$params()).load(); if (!angular.equals(cacheEntry.data, data)) { cacheEntry.set(data, true); } } data.$resolved = false; deferred = $q.defer(); data.$promise = deferred.promise; if (angular.isFunction(success)) { deferred.promise.then(success); } if (angular.isFunction(error)) { deferred.promise["catch"](error); } queueDeferred = $q.defer(); queueDeferred.promise.then(function(httpResource) { cacheEntry.load(); modifyObjectInPlace(data, httpResource, cacheEntry.value); data.$resolved = true; return deferred.resolve(data); }); queueDeferred.promise["catch"](deferred.reject); CachedResource.$writes.enqueue(params, data, action, queueDeferred); CachedResource.$writes.flush(); return data; }; };