aboutsummaryrefslogtreecommitdiffstats
path: root/src/Resource.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/Resource.js')
-rw-r--r--src/Resource.js69
1 files changed, 42 insertions, 27 deletions
diff --git a/src/Resource.js b/src/Resource.js
index 5462826d..3c149d8b 100644
--- a/src/Resource.js
+++ b/src/Resource.js
@@ -67,29 +67,36 @@ ResourceFactory.prototype = {
forEach(actions, function(action, name){
var isPostOrPut = action.method == 'POST' || action.method == 'PUT';
- Resource[name] = function (a1, a2, a3) {
+ Resource[name] = function (a1, a2, a3, a4) {
var params = {};
var data;
- var callback = noop;
+ var success = noop;
+ var error = null;
switch(arguments.length) {
- case 3: callback = a3;
+ case 4:
+ error = a4;
+ success = a3;
+ case 3:
case 2:
if (isFunction(a2)) {
- callback = a2;
+ success = a2;
+ error = a3;
//fallthrough
} else {
params = a1;
data = a2;
+ success = a3;
break;
}
case 1:
- if (isFunction(a1)) callback = a1;
+ if (isFunction(a1)) success = a1;
else if (isPostOrPut) data = a1;
else params = a1;
break;
case 0: break;
default:
- throw "Expected between 0-3 arguments [params, data, callback], got " + arguments.length + " arguments.";
+ throw "Expected between 0-4 arguments [params, data, success, error], got " +
+ arguments.length + " arguments.";
}
var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data));
@@ -97,23 +104,20 @@ ResourceFactory.prototype = {
action.method,
route.url(extend({}, action.params || {}, extractParams(data), params)),
data,
- function(status, response, clear) {
- if (200 <= status && status < 300) {
- if (response) {
- if (action.isArray) {
- value.length = 0;
- forEach(response, function(item){
- value.push(new Resource(item));
- });
- } else {
- copy(response, value);
- }
+ function(status, response) {
+ if (response) {
+ if (action.isArray) {
+ value.length = 0;
+ forEach(response, function(item) {
+ value.push(new Resource(item));
+ });
+ } else {
+ copy(response, value);
}
- (callback||noop)(value);
- } else {
- throw {status: status, response:response, message: status + ": " + response};
}
+ (success||noop)(value);
},
+ error || action.verifyCache,
action.verifyCache);
return value;
};
@@ -122,18 +126,29 @@ ResourceFactory.prototype = {
return self.route(url, extend({}, paramDefaults, additionalParamDefaults), actions);
};
- Resource.prototype['$' + name] = function(a1, a2){
- var params = extractParams(this);
- var callback = noop;
+ Resource.prototype['$' + name] = function(a1, a2, a3) {
+ var params = extractParams(this),
+ success = noop,
+ error;
+
switch(arguments.length) {
- case 2: params = a1; callback = a2;
- case 1: if (typeof a1 == $function) callback = a1; else params = a1;
+ case 3: params = a1; success = a2; error = a3; break;
+ case 2:
+ case 1:
+ if (isFunction(a1)) {
+ success = a1;
+ error = a2;
+ } else {
+ params = a1;
+ success = a2 || noop;
+ }
case 0: break;
default:
- throw "Expected between 1-2 arguments [params, callback], got " + arguments.length + " arguments.";
+ throw "Expected between 1-3 arguments [params, success, error], got " +
+ arguments.length + " arguments.";
}
var data = isPostOrPut ? this : undefined;
- Resource[name].call(this, params, data, callback);
+ Resource[name].call(this, params, data, success, error);
};
});
return Resource;