Skip to content

Commit 0d8a9b1

Browse files
committed
Closes #82.
1 parent de3996b commit 0d8a9b1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+651
-878
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
###### Breaking API changes
44
- #76 - Queries and filtering. See [TRANSITION.md](https://github.com/jmdobry/angular-data/blob/master/TRANSITION.md).
5+
- #82 - Simplify error handling. Reduced size of angular-data.min.js by 4kb.
56

67
###### Backwards compatible API changes
78
- #17 - Where predicates should be able to handle OR, not just AND

dist/angular-data.js

+313-427
Large diffs are not rendered by default.

dist/angular-data.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/datastore/async_methods/create.js

+9-10
Original file line numberDiff line numberDiff line change
@@ -39,24 +39,23 @@ var errorPrefix = 'DS.create(resourceName, attrs[, options]): ';
3939
* ## Rejects with:
4040
*
4141
* - `{IllegalArgumentError}`
42-
* - `{RuntimeError}`
43-
* - `{UnhandledError}`
42+
* - `{NonexistentResourceError}`
4443
*/
4544
function create(resourceName, attrs, options) {
46-
var deferred = this.$q.defer(),
47-
promise = deferred.promise;
45+
var deferred = this.$q.defer();
46+
var promise = deferred.promise;
4847

4948
options = options || {};
5049

5150
if (!this.definitions[resourceName]) {
52-
deferred.reject(new this.errors.RuntimeError(errorPrefix + resourceName + ' is not a registered resource!'));
51+
deferred.reject(new this.errors.NER(errorPrefix + resourceName));
5352
} else if (!this.utils.isObject(attrs)) {
54-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'attrs: Must be an object!', { attrs: { actual: typeof attrs, expected: 'object' } }));
53+
deferred.reject(new this.errors.IA(errorPrefix + 'attrs: Must be an object!'));
5554
} else {
5655
try {
57-
var definition = this.definitions[resourceName],
58-
resource = this.store[resourceName],
59-
_this = this;
56+
var definition = this.definitions[resourceName];
57+
var resource = this.store[resourceName];
58+
var _this = this;
6059

6160
promise = promise
6261
.then(function (attrs) {
@@ -87,7 +86,7 @@ function create(resourceName, attrs, options) {
8786

8887
deferred.resolve(attrs);
8988
} catch (err) {
90-
deferred.reject(new this.errors.UnhandledError(err));
89+
deferred.reject(err);
9190
}
9291
}
9392

src/datastore/async_methods/destroy.js

+27-24
Original file line numberDiff line numberDiff line change
@@ -40,42 +40,45 @@ var errorPrefix = 'DS.destroy(resourceName, id): ';
4040
*
4141
* - `{IllegalArgumentError}`
4242
* - `{RuntimeError}`
43-
* - `{UnhandledError}`
43+
* - `{NonexistentResourceError}`
4444
*/
4545
function destroy(resourceName, id, options) {
46-
var deferred = this.$q.defer(),
47-
promise = deferred.promise;
46+
var deferred = this.$q.defer();
47+
var promise = deferred.promise;
4848

4949
options = options || {};
5050

5151
if (!this.definitions[resourceName]) {
52-
deferred.reject(new this.errors.RuntimeError(errorPrefix + resourceName + ' is not a registered resource!'));
52+
deferred.reject(new this.errors.NER(errorPrefix + resourceName));
5353
} else if (!this.utils.isString(id) && !this.utils.isNumber(id)) {
54-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'id: Must be a string or a number!', { id: { actual: typeof id, expected: 'string|number' } }));
54+
deferred.reject(new this.errors.IA(errorPrefix + 'id: Must be a string or a number!'));
5555
} else {
5656
var item = this.get(resourceName, id);
5757
if (!item) {
58-
deferred.reject(new this.errors.RuntimeError(errorPrefix + 'id: "' + id + '" not found!'));
58+
deferred.reject(new this.errors.R(errorPrefix + 'id: "' + id + '" not found!'));
5959
} else {
60-
var definition = this.definitions[resourceName],
61-
resource = this.store[resourceName],
62-
_this = this;
60+
try {
61+
var definition = this.definitions[resourceName];
62+
var _this = this;
6363

64-
promise = promise
65-
.then(function (attrs) {
66-
return _this.$q.promisify(definition.beforeDestroy)(resourceName, attrs);
67-
})
68-
.then(function () {
69-
return _this.adapters[options.adapter || definition.defaultAdapter].destroy(definition, id, options);
70-
})
71-
.then(function () {
72-
return _this.$q.promisify(definition.afterDestroy)(resourceName, item);
73-
})
74-
.then(function () {
75-
_this.eject(resourceName, id);
76-
return id;
77-
});
78-
deferred.resolve(item);
64+
promise = promise
65+
.then(function (attrs) {
66+
return _this.$q.promisify(definition.beforeDestroy)(resourceName, attrs);
67+
})
68+
.then(function () {
69+
return _this.adapters[options.adapter || definition.defaultAdapter].destroy(definition, id, options);
70+
})
71+
.then(function () {
72+
return _this.$q.promisify(definition.afterDestroy)(resourceName, item);
73+
})
74+
.then(function () {
75+
_this.eject(resourceName, id);
76+
return id;
77+
});
78+
deferred.resolve(item);
79+
} catch (err) {
80+
deferred.reject(err);
81+
}
7982
}
8083
}
8184

src/datastore/async_methods/destroyAll.js

+8-9
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,21 @@ var errorPrefix = 'DS.destroyAll(resourceName, params[, options]): ';
5050
* ## Rejects with:
5151
*
5252
* - `{IllegalArgumentError}`
53-
* - `{RuntimeError}`
54-
* - `{UnhandledError}`
53+
* - `{NonexistentResourceError}`
5554
*/
5655
function destroyAll(resourceName, params, options) {
57-
var deferred = this.$q.defer(),
58-
promise = deferred.promise,
59-
_this = this;
56+
var deferred = this.$q.defer();
57+
var promise = deferred.promise;
58+
var _this = this;
6059

6160
options = options || {};
6261

6362
if (!this.definitions[resourceName]) {
64-
deferred.reject(new this.errors.RuntimeError(errorPrefix + resourceName + ' is not a registered resource!'));
63+
deferred.reject(new this.errors.NER(errorPrefix + resourceName));
6564
} else if (!this.utils.isObject(params)) {
66-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'params: Must be an object!'));
65+
deferred.reject(new this.errors.IA(errorPrefix + 'params: Must be an object!'));
6766
} else if (!this.utils.isObject(options)) {
68-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'options: Must be an object!'));
67+
deferred.reject(new this.errors.IA(errorPrefix + 'options: Must be an object!'));
6968
} else {
7069
try {
7170
var definition = this.definitions[resourceName];
@@ -79,7 +78,7 @@ function destroyAll(resourceName, params, options) {
7978
});
8079
deferred.resolve();
8180
} catch (err) {
82-
deferred.reject(new this.errors.UnhandledError(err));
81+
deferred.reject(err);
8382
}
8483
}
8584

src/datastore/async_methods/find.js

+9-10
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,30 @@ var errorPrefix = 'DS.find(resourceName, id[, options]): ';
4141
* ## Rejects with:
4242
*
4343
* - `{IllegalArgumentError}`
44-
* - `{RuntimeError}`
45-
* - `{UnhandledError}`
44+
* - `{NonexistentResourceError}`
4645
*/
4746
function find(resourceName, id, options) {
48-
var deferred = this.$q.defer(),
49-
promise = deferred.promise;
47+
var deferred = this.$q.defer();
48+
var promise = deferred.promise;
5049

5150
options = options || {};
5251

5352
if (!this.definitions[resourceName]) {
54-
deferred.reject(new this.errors.RuntimeError(errorPrefix + resourceName + ' is not a registered resource!'));
53+
deferred.reject(new this.errors.NER(errorPrefix + resourceName));
5554
} else if (!this.utils.isString(id) && !this.utils.isNumber(id)) {
56-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'id: Must be a string or a number!', { id: { actual: typeof id, expected: 'string|number' } }));
55+
deferred.reject(new this.errors.IA(errorPrefix + 'id: Must be a string or a number!'));
5756
} else if (!this.utils.isObject(options)) {
58-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'options: Must be an object!', { options: { actual: typeof options, expected: 'object' } }));
57+
deferred.reject(new this.errors.IA(errorPrefix + 'options: Must be an object!'));
5958
} else {
6059
if (!('cacheResponse' in options)) {
6160
options.cacheResponse = true;
6261
} else {
6362
options.cacheResponse = !!options.cacheResponse;
6463
}
6564
try {
66-
var definition = this.definitions[resourceName],
67-
resource = this.store[resourceName],
68-
_this = this;
65+
var definition = this.definitions[resourceName];
66+
var resource = this.store[resourceName];
67+
var _this = this;
6968

7069
if (options.bypassCache) {
7170
delete resource.completedQueries[id];

src/datastore/async_methods/findAll.js

+9-10
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function _findAll(utils, resourceName, params, options) {
3939
try {
4040
return processResults.apply(_this, [utils, data, resourceName, queryHash]);
4141
} catch (err) {
42-
return _this.$q.reject(_this.errors.UnhandledError(err));
42+
return _this.$q.reject(err);
4343
}
4444
} else {
4545
return data;
@@ -115,23 +115,22 @@ function _findAll(utils, resourceName, params, options) {
115115
* ## Rejects with:
116116
*
117117
* - `{IllegalArgumentError}`
118-
* - `{RuntimeError}`
119-
* - `{UnhandledError}`
118+
* - `{NonexistentResourceError}`
120119
*/
121120
function findAll(resourceName, params, options) {
122-
var deferred = this.$q.defer(),
123-
promise = deferred.promise,
124-
_this = this;
121+
var deferred = this.$q.defer();
122+
var promise = deferred.promise;
123+
var _this = this;
125124

126125
options = options || {};
127126
params = params || {};
128127

129128
if (!this.definitions[resourceName]) {
130-
deferred.reject(new this.errors.RuntimeError(errorPrefix + resourceName + ' is not a registered resource!'));
129+
deferred.reject(new this.errors.NER(errorPrefix + resourceName));
131130
} else if (!this.utils.isObject(params)) {
132-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'params: Must be an object!'));
131+
deferred.reject(new this.errors.IA(errorPrefix + 'params: Must be an object!'));
133132
} else if (!this.utils.isObject(options)) {
134-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'options: Must be an object!'));
133+
deferred.reject(new this.errors.IA(errorPrefix + 'options: Must be an object!'));
135134
} else {
136135
if (!('cacheResponse' in options)) {
137136
options.cacheResponse = true;
@@ -144,7 +143,7 @@ function findAll(resourceName, params, options) {
144143
});
145144
deferred.resolve();
146145
} catch (err) {
147-
deferred.reject(new this.errors.UnhandledError(err));
146+
deferred.reject(err);
148147
}
149148
}
150149

src/datastore/async_methods/refresh.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ var errorPrefix = 'DS.refresh(resourceName, id[, options]): ';
3131
* ## Throws
3232
*
3333
* - `{IllegalArgumentError}`
34-
* - `{RuntimeError}`
34+
* - `{NonexistentResourceError}`
3535
*
3636
* @param {string} resourceName The resource type, e.g. 'user', 'comment', etc.
3737
* @param {string|number} id The primary key of the item to refresh from the server.
@@ -46,18 +46,17 @@ var errorPrefix = 'DS.refresh(resourceName, id[, options]): ';
4646
* ## Rejects with:
4747
*
4848
* - `{IllegalArgumentError}`
49-
* - `{RuntimeError}`
50-
* - `{UnhandledError}`
49+
* - `{NonexistentResourceError}`
5150
*/
5251
function refresh(resourceName, id, options) {
5352
options = options || {};
5453

5554
if (!this.definitions[resourceName]) {
56-
throw new this.errors.RuntimeError(errorPrefix + resourceName + ' is not a registered resource!');
55+
throw new this.errors.NER(errorPrefix + resourceName);
5756
} else if (!this.utils.isString(id) && !this.utils.isNumber(id)) {
58-
throw new this.errors.IllegalArgumentError(errorPrefix + 'id: Must be a string or a number!', { id: { actual: typeof id, expected: 'string|number' } });
57+
throw new this.errors.IA(errorPrefix + 'id: Must be a string or a number!');
5958
} else if (!this.utils.isObject(options)) {
60-
throw new this.errors.IllegalArgumentError(errorPrefix + 'options: Must be an object!', { options: { actual: typeof options, expected: 'object' } });
59+
throw new this.errors.IA(errorPrefix + 'options: Must be an object!');
6160
} else {
6261
options.bypassCache = true;
6362

src/datastore/async_methods/save.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,28 @@ var errorPrefix = 'DS.save(resourceName, id[, options]): ';
4040
*
4141
* - `{IllegalArgumentError}`
4242
* - `{RuntimeError}`
43-
* - `{UnhandledError}`
43+
* - `{NonexistentResourceError}`
4444
*/
4545
function save(resourceName, id, options) {
46-
var deferred = this.$q.defer(),
47-
promise = deferred.promise;
46+
var deferred = this.$q.defer();
47+
var promise = deferred.promise;
4848

4949
options = options || {};
5050

5151
if (!this.definitions[resourceName]) {
52-
deferred.reject(new this.errors.RuntimeError(errorPrefix + resourceName + ' is not a registered resource!'));
52+
deferred.reject(new this.errors.NER(errorPrefix + resourceName));
5353
} else if (!this.utils.isString(id) && !this.utils.isNumber(id)) {
54-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'id: Must be a string or a number!', { id: { actual: typeof id, expected: 'string|number' } }));
54+
deferred.reject(new this.errors.IA(errorPrefix + 'id: Must be a string or a number!'));
5555
} else if (!this.utils.isObject(options)) {
56-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'options: Must be an object!', { options: { actual: typeof options, expected: 'object' } }));
56+
deferred.reject(new this.errors.IA(errorPrefix + 'options: Must be an object!'));
5757
} else {
5858
var item = this.get(resourceName, id);
5959
if (!item) {
60-
deferred.reject(new this.errors.RuntimeError(errorPrefix + 'id: "' + id + '" not found!'));
60+
deferred.reject(new this.errors.R(errorPrefix + 'id: "' + id + '" not found!'));
6161
} else {
62-
var definition = this.definitions[resourceName],
63-
resource = this.store[resourceName],
64-
_this = this;
62+
var definition = this.definitions[resourceName];
63+
var resource = this.store[resourceName];
64+
var _this = this;
6565

6666
promise = promise
6767
.then(function (attrs) {

src/datastore/async_methods/update.js

+10-11
Original file line numberDiff line numberDiff line change
@@ -42,27 +42,26 @@ var errorPrefix = 'DS.update(resourceName, id, attrs[, options]): ';
4242
* ## Rejects with:
4343
*
4444
* - `{IllegalArgumentError}`
45-
* - `{RuntimeError}`
46-
* - `{UnhandledError}`
45+
* - `{NonexistentResourceError}`
4746
*/
4847
function update(resourceName, id, attrs, options) {
49-
var deferred = this.$q.defer(),
50-
promise = deferred.promise;
48+
var deferred = this.$q.defer();
49+
var promise = deferred.promise;
5150

5251
options = options || {};
5352

5453
if (!this.definitions[resourceName]) {
55-
deferred.reject(new this.errors.RuntimeError(errorPrefix + resourceName + ' is not a registered resource!'));
54+
deferred.reject(new this.errors.NER(errorPrefix + resourceName));
5655
} else if (!this.utils.isString(id) && !this.utils.isNumber(id)) {
57-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'id: Must be a string or a number!'));
56+
deferred.reject(new this.errors.IA(errorPrefix + 'id: Must be a string or a number!'));
5857
} else if (!this.utils.isObject(attrs)) {
59-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'attrs: Must be an object!'));
58+
deferred.reject(new this.errors.IA(errorPrefix + 'attrs: Must be an object!'));
6059
} else if (!this.utils.isObject(options)) {
61-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'options: Must be an object!'));
60+
deferred.reject(new this.errors.IA(errorPrefix + 'options: Must be an object!'));
6261
} else {
63-
var definition = this.definitions[resourceName],
64-
resource = this.store[resourceName],
65-
_this = this;
62+
var definition = this.definitions[resourceName];
63+
var resource = this.store[resourceName];
64+
var _this = this;
6665

6766
if (!('cacheResponse' in options)) {
6867
options.cacheResponse = true;

src/datastore/async_methods/updateAll.js

+9-11
Original file line numberDiff line numberDiff line change
@@ -56,27 +56,25 @@ var errorPrefix = 'DS.updateAll(resourceName, attrs, params[, options]): ';
5656
* ## Rejects with:
5757
*
5858
* - `{IllegalArgumentError}`
59-
* - `{RuntimeError}`
60-
* - `{UnhandledError}`
59+
* - `{NonexistentResourceError}`
6160
*/
6261
function updateAll(resourceName, attrs, params, options) {
63-
var deferred = this.$q.defer(),
64-
promise = deferred.promise;
62+
var deferred = this.$q.defer();
63+
var promise = deferred.promise;
6564

6665
options = options || {};
6766

6867
if (!this.definitions[resourceName]) {
69-
deferred.reject(new this.errors.RuntimeError(errorPrefix + resourceName + ' is not a registered resource!'));
68+
deferred.reject(new this.errors.NER(errorPrefix + resourceName));
7069
} else if (!this.utils.isObject(attrs)) {
71-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'attrs: Must be an object!'));
70+
deferred.reject(new this.errors.IA(errorPrefix + 'attrs: Must be an object!'));
7271
} else if (!this.utils.isObject(params)) {
73-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'params: Must be an object!'));
72+
deferred.reject(new this.errors.IA(errorPrefix + 'params: Must be an object!'));
7473
} else if (!this.utils.isObject(options)) {
75-
deferred.reject(new this.errors.IllegalArgumentError(errorPrefix + 'options: Must be an object!'));
74+
deferred.reject(new this.errors.IA(errorPrefix + 'options: Must be an object!'));
7675
} else {
77-
var definition = this.definitions[resourceName],
78-
resource = this.store[resourceName],
79-
_this = this;
76+
var definition = this.definitions[resourceName];
77+
var _this = this;
8078

8179
if (!('cacheResponse' in options)) {
8280
options.cacheResponse = true;

0 commit comments

Comments
 (0)