diff options
Diffstat (limited to 'src/Resource.js')
| -rw-r--r-- | src/Resource.js | 69 | 
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; | 
