Files
cdnjs/ajax/libs/restangular/0.4.2/restangular.min.js
T

8 lines
3.6 KiB
JavaScript

/**
* Restfull Resources service for AngularJS apps
* @version v0.4.2 - 2013-04-16
* @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 r(r){return _.contains(e,r)}var e=["get","head","options","trace"];this.baseUrl="",this.setBaseUrl=function(r){this.baseUrl=r},this.extraFields=[],this.setExtraFields=function(r){this.extraFields=r},this.urlCreator="path",this.setUrlCreator=function(r){if(!_.has(t,r))throw Error("URL Path selected isn't valid");this.urlCreator=r},this.restangularFields={id:"id",route:"route",parentResource:"parentResource"},this.setRestangularFields=function(r){this.restangularFields=_.extend(this.restangularFields,r)},this.responseExtractor=function(r){return r},this.setResponseExtractor=function(r){this.responseExtractor=r};var t={},s=function(r,e){this.baseUrl=r,this.restangularFields=e};s.prototype.base=function(r){var e=this.restangularFields;return this.baseUrl+_.reduce(this.parentsArray(r),function(r,t){var s=r+"/"+t[e.route];return _.has(t,e.id)&&(s+="/"+t[e.id]),s},"")},s.prototype.parentsArray=function(r){for(var e=[];!_.isUndefined(r);)e.push(r),r=r[this.restangularFields.parentResource];return e.reverse()},s.prototype.fetchUrl=function(r,e){return this.base(e)+"/"+r.toLowerCase()},s.prototype.resource=function(r,e,t){return e(this.base(r)+"/:what",{},{getArray:{method:"GET",params:{},isArray:!0,headers:t||{}},get:{method:"GET",params:{},isArray:!1,headers:t||{}},put:{method:"PUT",params:{},isArray:!1,headers:t||{}},post:{method:"POST",params:{},isArray:!1,headers:t||{}},remove:{method:"DELETE",params:{},isArray:!1,headers:t||{}},head:{method:"HEAD",params:{},isArray:!1,headers:t||{}},trace:{method:"TRACE",params:{},isArray:!1,headers:t||{}},options:{method:"OPTIONS",params:{},isArray:!1,headers:t||{}},patch:{method:"PATCH",params:{},isArray:!1,headers:t||{}}})},t.path=s,this.$get=["$resource","$q",function(e,s){function n(r,e,t){if(e[g.route]=t,e.getList=_.bind(i,e),e.get=_.bind(o,e),e.put=_.bind(h,e),e.post=_.bind(d,e),e.remove=_.bind(u,e),e.head=_.bind(c,e),e.trace=_.bind(l,e),e.options=_.bind(p,e),e.patch=_.bind(f,e),r){var s=_.chain(g).pick(["id","route","parentResource"]).values().union(m).value();e[g.parentResource]=_.pick(r,s)}return e}function i(r,t,i){var a=r?{what:r}:{},o=this,u=s.defer();return v.resource(this,e,i).getArray(_.extend(a,t),function(e){var t=b(e,"get"),s=_.map(t,function(e){return r?n(o,e,r):n(null,e,o[g.route])});u.resolve(s)},function(){u.reject(arguments)}),u.promise}function a(t,i,a,o){var u=this,h=s.defer(),d=i||{},c=a||this,l=function(r){var e=b(r,t);e?"post"!==t?h.resolve(n(u[g.parentResource],e,u[g.route])):h.resolve(n(u,e,d.what)):h.resolve()},p=function(){h.reject(arguments)};return r(t)?v.resource(this,e,o)[t](d,l,p):v.resource(this,e,o)[t](d,c,l,p),h.promise}function o(r,e){return _.bind(a,this)("get",r,void 0,e)}function u(r,e){return _.bind(a,this)("remove",r,{},e)}function h(r,e){return _.bind(a,this)("put",r,void 0,e)}function d(r,e,t,s){return _.bind(a,this)("post",_.extend({what:r},t),e,s)}function c(r,e){return _.bind(a,this)("head",r,void 0,e)}function l(r,e){return _.bind(a,this)("trace",r,void 0,e)}function p(r,e){return _.bind(a,this)("options",r,void 0,e)}function f(r,e){return _.bind(a,this)("patch",r,void 0,e)}var v=new t[this.urlCreator](this.baseUrl,this.restangularFields),m=this.extraFields,b=this.responseExtractor,g=this.restangularFields,y={};return y.one=function(r,e){var t={};return t[g.id]=e,n(null,t,r)},y.all=function(r){return n(null,{},r)},y}]});