UNPKG

2.73 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.8.0
2var modifyObjectInPlace, writeCache;
3
4modifyObjectInPlace = require('./modify_object_in_place');
5
6module.exports = writeCache = function($q, providerParams, action, CachedResource, actionConfig) {
7 var ResourceCacheEntry;
8 ResourceCacheEntry = require('./resource_cache_entry')(providerParams);
9 return function() {
10 var args, cacheEntry, data, deferred, error, instanceMethod, isArray, isDirty, param, params, queueDeferred, resource, success, value, wrapInCachedResource, _i, _len, _ref;
11 instanceMethod = this instanceof CachedResource;
12 args = Array.prototype.slice.call(arguments);
13 params = !instanceMethod && angular.isObject(args[1]) ? args.shift() : instanceMethod && angular.isObject(args[0]) ? args.shift() : {};
14 data = instanceMethod ? this : args.shift();
15 success = args[0], error = args[1];
16 isArray = angular.isArray(data);
17 isDirty = !actionConfig.cacheOnly;
18 wrapInCachedResource = function(object) {
19 if (object instanceof CachedResource) {
20 return object;
21 } else {
22 return new CachedResource(object);
23 }
24 };
25 if (isArray) {
26 data = data.map(function(o) {
27 return wrapInCachedResource(o);
28 });
29 for (_i = 0, _len = data.length; _i < _len; _i++) {
30 resource = data[_i];
31 cacheEntry = new ResourceCacheEntry(CachedResource.$key, resource.$params()).load();
32 if (!angular.equals(cacheEntry.data, resource)) {
33 cacheEntry.set(resource, isDirty);
34 }
35 }
36 } else {
37 data = wrapInCachedResource(data);
38 _ref = data.$params();
39 for (param in _ref) {
40 value = _ref[param];
41 params[param] = value;
42 }
43 cacheEntry = new ResourceCacheEntry(CachedResource.$key, data.$params()).load();
44 if (!angular.equals(cacheEntry.data, data)) {
45 cacheEntry.set(data, isDirty);
46 }
47 }
48 data.$resolved = false;
49 deferred = $q.defer();
50 data.$promise = deferred.promise;
51 if (angular.isFunction(success)) {
52 deferred.promise.then(success);
53 }
54 if (angular.isFunction(error)) {
55 deferred.promise["catch"](error);
56 }
57 if (actionConfig.cacheOnly) {
58 data.$resolved = true;
59 deferred.resolve(data);
60 } else {
61 queueDeferred = $q.defer();
62 queueDeferred.promise.then(function(httpResource) {
63 cacheEntry.load();
64 modifyObjectInPlace(data, httpResource, cacheEntry.value);
65 data.$resolved = true;
66 return deferred.resolve(data);
67 });
68 queueDeferred.promise["catch"](deferred.reject);
69 CachedResource.$writes.enqueue(params, data, action, queueDeferred);
70 CachedResource.$writes.flush();
71 }
72 return data;
73 };
74};