Files

8 lines
5.3 KiB
JavaScript

/**
* Restfull Resources service for AngularJS apps
* @version v0.6.3 - 2013-05-09
* @link https://github.com/mgonto/restangular
* @author Martin Gontovnikas <martin@gonto.com.ar>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
var module=angular.module("restangular",["ngResource"]);module.provider("Restangular",function(){function t(t){return _.contains(r,t)}function e(t){return _.defaults(t,o)}var r=["get","head","options","trace"],n="";this.setBaseUrl=function(t){n=t};var i=[];this.setExtraFields=function(t){i=t};var o={};this.setDefaultHttpFields=function(t){o=t};var a="path";this.setUrlCreator=function(t){if(!_.has(h,t))throw Error("URL Path selected isn't valid");a=t};var s={id:"id",route:"route",parentResource:"parentResource",restangularCollection:"restangularCollection",what:"restangularWhat"};this.setRestangularFields=function(t){s=_.extend(s,t)};var u=function(t){return t};this.setResponseExtractor=function(t){u=t},this.setResponseInterceptor=this.setResponseExtractor;var c=function(t){return t};this.setOnElemRestangularized=function(t){c=t};var d=!0;this.setListTypeIsArray=function(t){d=t};var l=null;this.setRequestSuffix=function(t){l=t};var h={},p=function(){};p.prototype.parentsArray=function(t){for(var e=[];!_.isUndefined(t);)e.push(t),t=t[s.parentResource];return e.reverse()},p.prototype.resource=function(t,r,n){var i={};return r(this.base(t)+"/:"+s.what+(l||""),{},{getList:e({method:"GET",params:i,isArray:d,headers:n||{}}),get:e({method:"GET",params:i,isArray:!1,headers:n||{}}),put:e({method:"PUT",params:i,isArray:!1,headers:n||{}}),post:e({method:"POST",params:i,isArray:!1,headers:n||{}}),remove:e({method:"DELETE",params:i,isArray:!1,headers:n||{}}),head:e({method:"HEAD",params:i,isArray:!1,headers:n||{}}),trace:e({method:"TRACE",params:i,isArray:!1,headers:n||{}}),options:e({method:"OPTIONS",params:i,isArray:!1,headers:n||{}}),patch:e({method:"PATCH",params:i,isArray:!1,headers:n||{}})})};var f=function(){};f.prototype=new p,f.prototype.base=function(t){return n+_.reduce(this.parentsArray(t),function(t,e){var r=t+"/"+e[s.route];return e[s.restangularCollection]||(r+="/"+e[s.id]),r},"")},f.prototype.fetchUrl=function(t,e){var r=this.base(t);return e[s.what]&&(r+="/"+e[s.what]),r},h.path=f,this.$get=["$resource","$q",function(e,r){function n(t,e,r){if(e[s.route]=r,e.addRestangularMethod=_.bind(G,e),t){var n=_.union(_.values(_.pick(s,["id","route","parentResource"])),i);e[s.parentResource]=_.pick(t,n)}return e}function o(t,e,r){var n={};return n[s.id]=r,b(t,n,e)}function d(t,e){return g(t,{},e,!0)}function l(t,e){return t.call=_.bind(p,t),t.get=_.bind(f,t),t[s.restangularCollection]=e,e&&(t.push=_.bind(p,t,"push")),t}function p(t){var e=r.defer(),n=arguments;return this.then(function(r){var i=Array.prototype.slice.call(n,1),o=r[t];o.apply(r,i),e.resolve(r)}),l(e.promise,this[s.restangularCollection])}function f(t){var e=r.defer();return this.then(function(r){e.resolve(r[t])}),l(e.promise,this[s.restangularCollection])}function v(t){return _.omit(t,_.values(_.omit(s,"id")))}function m(t){t.customOperation=_.bind(S,t),_.each(["put","post","get","delete"],function(e){_.each(["do","custom"],function(r){var n=r+e.toUpperCase();t[n]=_.bind(S,t,e)})}),t.customGETLIST=_.bind(R,t),t.doGETLIST=t.customGETLIST}function b(t,e,r){var i=n(t,e,r);return i[s.restangularCollection]=!1,i.get=_.bind(C,i),i.getList=_.bind(R,i),i.put=_.bind(T,i),i.post=_.bind(L,i),i.remove=_.bind(E,i),i.head=_.bind(w,i),i.trace=_.bind(x,i),i.options=_.bind(U,i),i.patch=_.bind(I,i),i.one=_.bind(o,i,i),i.all=_.bind(d,i,i),m(i),c(i,!1,r)}function g(t,e,r){var i=n(t,e,r);return i[s.restangularCollection]=!0,i.post=_.bind(L,i,null),i.head=_.bind(w,i),i.trace=_.bind(x,i),i.options=_.bind(U,i),i.patch=_.bind(I,i),i.getList=_.bind(R,i,null),m(i),c(i,!0,r)}function y(t){var e={};return t&&(e[s.what]=t),e}function R(t,n,i){var o=y(t),a=this,c=r.defer();return O.resource(this,e,i).getList(_.extend(o,n),function(e){var r=u(e,"getList",t,O.fetchUrl(a,o)),n=_.map(r,function(e){return a[s.restangularCollection]?b(null,e,a[s.route]):b(a,e,t)});n=_.extend(r,n),a[s.restangularCollection]?c.resolve(g(null,n,a[s.route])):c.resolve(g(a,n,t))},function(t){c.reject(t)}),l(c.promise,!0)}function A(n,i,o,a){var c=this,d=r.defer(),h=i||{},p=o||this,f=function(t){var e=u(t,n,h[s.what]||c[s.route],O.fetchUrl(c,h))||p;"post"!==n||c[s.restangularCollection]?d.resolve(b(c[s.parentResource],e,c[s.route])):d.resolve(b(c,e,h[s.what]))},_=function(t){d.reject(t)};return t(n)?O.resource(this,e,a)[n](h,f,_):O.resource(this,e,a)[n](h,o||v(this),f,_),l(d.promise)}function C(t,e){return _.bind(A,this)("get",t,void 0,e)}function E(t,e){return _.bind(A,this)("remove",t,{},e)}function T(t,e){return _.bind(A,this)("put",t,void 0,e)}function L(t,e,r,n){return _.bind(A,this)("post",_.extend(y(t),r),e,n)}function w(t,e){return _.bind(A,this)("head",t,void 0,e)}function x(t,e){return _.bind(A,this)("trace",t,void 0,e)}function U(t,e){return _.bind(A,this)("options",t,void 0,e)}function I(t,e){return _.bind(A,this)("patch",t,void 0,e)}function S(t,e,r,n,i){return _.bind(A,this)(t,_.extend(y(e),r),i,n)}function G(t,e,r,n,i,o){var a;a="getList"===e?_.bind(R,this,r):_.bind(S,this,e,r),this[t]=function(t,e,r){var s=_.defaults({params:t,headers:e,elem:r},{params:n,headers:i,elem:o});return a(s.params,s.headers,s.elem)}}var O=new h[a],P={};return P.one=_.bind(o,P,null),P.all=_.bind(d,P,null),P}]});