@priotas/restangular
Version:
Restful Resources service for AngularJS apps
7 lines • 21.6 kB
JavaScript
/**
* Restful Resources service for AngularJS apps
* @version v1.7.1 - 2018-08-15 * @link https://github.com/priotas/restangular
* @author Martin Gontovnikas <martin@gon.to>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
!function(e,r){"function"==typeof define&&define.amd?define(["angular"],r):"object"==typeof module&&module.exports?module.exports=r(require("angular")):r(e.angular)}(this,function(j){var e=j.module("restangular",[]);return e.provider("Restangular",function(){var s={};s.init=function(i,F){i.configuration=F;var r=["get","head","options","trace","getlist"];F.isSafe=function(e){return-1<r.indexOf(e.toLowerCase())};var t=/^https?:\/\//i;F.isAbsoluteUrl=function(e){return j.isUndefined(F.absoluteUrl)||null===F.absoluteUrl?e&&t.test(e):F.absoluteUrl},F.absoluteUrl=!!j.isUndefined(F.absoluteUrl)||F.absoluteUrl,i.setSelfLinkAbsoluteUrl=function(e){F.absoluteUrl=e},F.baseUrl=j.isUndefined(F.baseUrl)?"":F.baseUrl,i.setBaseUrl=function(e){return F.baseUrl=/\/$/.test(e)?e.substring(0,e.length-1):e,this},F.extraFields=F.extraFields||[],i.setExtraFields=function(e){return F.extraFields=e,this},F.defaultHttpFields=F.defaultHttpFields||{},i.setDefaultHttpFields=function(e){return F.defaultHttpFields=e,this},F.plainByDefault=F.plainByDefault||!1,i.setPlainByDefault=function(e){return F.plainByDefault=!0===e,this},F.withHttpValues=function(e,r){return j.extend(r,e,F.defaultHttpFields)},F.encodeIds=!!j.isUndefined(F.encodeIds)||F.encodeIds,i.setEncodeIds=function(e){F.encodeIds=e},F.defaultRequestParams=F.defaultRequestParams||{get:{},post:{},put:{},remove:{},common:{}},i.setDefaultRequestParams=function(e,r){var t=[],n=r||e;return j.isUndefined(r)?t.push("common"):j.isArray(e)?t=e:t.push(e),j.forEach(t,function(e){F.defaultRequestParams[e]=n}),this},i.requestParams=F.defaultRequestParams,F.defaultHeaders=F.defaultHeaders||{},i.setDefaultHeaders=function(e){return F.defaultHeaders=e,i.defaultHeaders=F.defaultHeaders,this},i.defaultHeaders=F.defaultHeaders,F.methodOverriders=F.methodOverriders||[],i.setMethodOverriders=function(e){var r=j.extend([],e);return F.isOverridenMethod("delete",r)&&r.push("remove"),F.methodOverriders=r,this},F.jsonp=!j.isUndefined(F.jsonp)&&F.jsonp,i.setJsonp=function(e){F.jsonp=e},F.isOverridenMethod=function(r,e){var t=e||F.methodOverriders;return!j.isUndefined(t.filter(function(e){return e.toLowerCase()===r.toLowerCase()}).shift())},F.urlCreator=F.urlCreator||"path",i.setUrlCreator=function(e){if(!F.urlCreatorFactory.hasOwnProperty(e))throw new Error("URL Path selected isn't valid");return F.urlCreator=e,this},F.restangularFields=F.restangularFields||{id:"id",route:"route",parentResource:"parentResource",restangularCollection:"restangularCollection",cannonicalId:"__cannonicalId",etag:"restangularEtag",selfLink:"href",get:"get",getList:"getList",put:"put",post:"post",remove:"remove",head:"head",trace:"trace",options:"options",patch:"patch",getRestangularUrl:"getRestangularUrl",getRequestedUrl:"getRequestedUrl",putElement:"putElement",addRestangularMethod:"addRestangularMethod",getParentList:"getParentList",clone:"clone",ids:"ids",httpConfig:"_$httpConfig",reqParams:"reqParams",one:"one",all:"all",several:"several",oneUrl:"oneUrl",allUrl:"allUrl",customPUT:"customPUT",customPATCH:"customPATCH",customPOST:"customPOST",customDELETE:"customDELETE",customGET:"customGET",customGETLIST:"customGETLIST",customOperation:"customOperation",doPUT:"doPUT",doPATCH:"doPATCH",doPOST:"doPOST",doDELETE:"doDELETE",doGET:"doGET",doGETLIST:"doGETLIST",fromServer:"fromServer",withConfig:"withConfig",withHttpConfig:"withHttpConfig",singleOne:"singleOne",plain:"plain",save:"save",restangularized:"restangularized"},i.setRestangularFields=function(e){return F.restangularFields=j.extend(F.restangularFields,e),this},F.isRestangularized=function(e){return!!e[F.restangularFields.restangularized]},F.setFieldToElem=function(e,r,t){var n=e.split("."),s=r;j.forEach(n.slice(0,n.length-1),function(e){s[e]={},s=s[e]});var a=null===n?0:n.length,i=a?n[a-1]:void 0;return s[i]=t,this},F.getFieldFromElem=function(e,r){var t=e.split("."),n=r;return j.forEach(t,function(e){n&&(n=n[e])}),j.copy(n)},F.setIdToElem=function(e,r){return F.setFieldToElem(F.restangularFields.id,e,r),this},F.getIdFromElem=function(e){return F.getFieldFromElem(F.restangularFields.id,e)},F.isValidId=function(e){return""!==e&&!j.isUndefined(e)&&null!==e},F.setUrlToElem=function(e,r){return F.setFieldToElem(F.restangularFields.selfLink,e,r),this},F.getUrlFromElem=function(e){return F.getFieldFromElem(F.restangularFields.selfLink,e)},F.useCannonicalId=!j.isUndefined(F.useCannonicalId)&&F.useCannonicalId,i.setUseCannonicalId=function(e){return F.useCannonicalId=e,this},F.getCannonicalIdFromElem=function(e){var r=e[F.restangularFields.cannonicalId];return F.isValidId(r)?r:F.getIdFromElem(e)},F.responseInterceptors=F.responseInterceptors||[],F.defaultResponseInterceptor=function(e){return e},F.responseExtractor=function(e,r,t,n,s,a){var i=j.copy(F.responseInterceptors);i.push(F.defaultResponseInterceptor);var o=e;return j.forEach(i,function(e){o=e(o,r,t,n,s,a)}),o},i.addResponseInterceptor=function(e){return F.responseInterceptors.push(e),this},F.errorInterceptors=F.errorInterceptors||[],i.addErrorInterceptor=function(e){return F.errorInterceptors.push(e),this},i.setResponseInterceptor=i.addResponseInterceptor,i.setResponseExtractor=i.addResponseInterceptor,i.setErrorInterceptor=i.addErrorInterceptor,F.requestInterceptors=F.requestInterceptors||[],F.defaultInterceptor=function(e,r,t,n,s,a,i){return{element:e,headers:s,params:a,httpConfig:i}},F.fullRequestInterceptor=function(e,t,n,s,r,a,i){var o=j.copy(F.requestInterceptors),l=F.defaultInterceptor(e,t,n,s,r,a,i);return o.reduce(function(e,r){return j.extend(e,r(e.element,t,n,s,e.headers,e.params,e.httpConfig))},l)},i.addRequestInterceptor=function(o){return F.requestInterceptors.push(function(e,r,t,n,s,a,i){return{headers:s,params:a,element:o(e,r,t,n),httpConfig:i}}),this},i.setRequestInterceptor=i.addRequestInterceptor,i.addFullRequestInterceptor=function(e){return F.requestInterceptors.push(e),this},i.setFullRequestInterceptor=i.addFullRequestInterceptor,F.onBeforeElemRestangularized=F.onBeforeElemRestangularized||function(e){return e},i.setOnBeforeElemRestangularized=function(e){return F.onBeforeElemRestangularized=e,this},i.setRestangularizePromiseInterceptor=function(e){return F.restangularizePromiseInterceptor=e,this},F.onElemRestangularized=F.onElemRestangularized||function(e){return e},i.setOnElemRestangularized=function(e){return F.onElemRestangularized=e,this},F.shouldSaveParent=F.shouldSaveParent||function(){return!0},i.setParentless=function(r){return j.isArray(r)?F.shouldSaveParent=function(e){return r.indexOf(e)<0}:j.isBoolean(r)&&(F.shouldSaveParent=function(){return!r}),this},F.suffix=j.isUndefined(F.suffix)?null:F.suffix,i.setRequestSuffix=function(e){return F.suffix=e,this},F.transformers=F.transformers||{},F.matchTransformers=F.matchTransformers||[],i.addElementTransformer=function(e,r,t){var n=null,s=null;2===arguments.length?s=r:(s=t,n=r);var a=function(e,r){return null===n||e===n?s(r):r};return j.isObject(e)&&"[object RegExp]"===Object.prototype.toString.call(e)?F.matchTransformers.push({regexp:e,transformer:a}):(F.transformers[e]||(F.transformers[e]=[]),F.transformers[e].push(a)),i},i.extendCollection=function(e,r){return i.addElementTransformer(e,!0,r)},i.extendModel=function(e,r){return i.addElementTransformer(e,!1,r)},F.transformElem=function(e,r,t,n,s){if(!s&&!F.transformLocalElements&&!e[F.restangularFields.fromServer])return e;var a=e,i=F.matchTransformers;i&&j.forEach(i,function(e){e.regexp.test(t)&&(a=e.transformer(r,a))});var o=F.transformers[t];return o&&j.forEach(o,function(e){a=e(r,a)}),F.onElemRestangularized(a,r,t,n)},F.transformLocalElements=!j.isUndefined(F.transformLocalElements)&&F.transformLocalElements,i.setTransformOnlyServerElements=function(e){F.transformLocalElements=!e},F.fullResponse=!j.isUndefined(F.fullResponse)&&F.fullResponse,i.setFullResponse=function(e){return F.fullResponse=e,this},F.urlCreatorFactory={};var e=function(){};e.prototype.setConfig=function(e){return this.config=e,this},e.prototype.parentsArray=function(e){for(var r=[];e;)r.push(e),e=e[this.config.restangularFields.parentResource];return r.reverse()},e.prototype.resource=function(e,r,t,n,s,a,i,o){var l=j.extend(s||{},this.config.defaultRequestParams.common),u=j.extend(n||{},this.config.defaultHeaders);i&&(F.isSafe(o)?u["If-None-Match"]=i:u["If-Match"]=i);var d,c,f,g,p,h=this.base(e);if(a||0===a){var m="";/\/$/.test(h)||(m+="/"),h+=m+=a}return this.config.suffix&&-1===h.indexOf(this.config.suffix,h.length-this.config.suffix.length)&&!this.config.getUrlFromElem(e)&&(h+=this.config.suffix),e[this.config.restangularFields.httpConfig]=void 0,d=this.config,c=r,f=h,g={getList:this.config.withHttpValues(t,{method:"GET",params:l,headers:u}),get:this.config.withHttpValues(t,{method:"GET",params:l,headers:u}),jsonp:this.config.withHttpValues(t,{method:"jsonp",params:l,headers:u}),put:this.config.withHttpValues(t,{method:"PUT",params:l,headers:u}),post:this.config.withHttpValues(t,{method:"POST",params:l,headers:u}),remove:this.config.withHttpValues(t,{method:"DELETE",params:l,headers:u}),head:this.config.withHttpValues(t,{method:"HEAD",params:l,headers:u}),trace:this.config.withHttpValues(t,{method:"TRACE",params:l,headers:u}),options:this.config.withHttpValues(t,{method:"OPTIONS",params:l,headers:u}),patch:this.config.withHttpValues(t,{method:"PATCH",params:l,headers:u})},p={},j.forEach(Object.keys(g),function(e){var r=g[e];r.params=j.extend({},r.params,d.defaultRequestParams[r.method.toLowerCase()]),r.params&&j.isObject(r.params)&&(j.isArray(r.params)?r.params:Object.keys(r.params)).length||delete r.params,d.isSafe(r.method)?p[e]=function(){return c(j.extend(r,{url:f}))}:p[e]=function(e){return c(j.extend(r,{url:f,data:e}))}}),p};var n=function(){};(n.prototype=new e).normalizeUrl=function(e){var r=/((?:http[s]?:)?\/\/)?(.*)?/.exec(e);return r[2]=r[2].replace(/[\\\/]+/g,"/"),void 0!==r[1]?r[1]+r[2]:r[2]},n.prototype.base=function(e){var i=this;return this.parentsArray(e).reduce(function(e,r){var t,n=i.config.getUrlFromElem(r);if(n){if(i.config.isAbsoluteUrl(n))return n;t=n}else if(t=r[i.config.restangularFields.route],r[i.config.restangularFields.restangularCollection]){var s=r[i.config.restangularFields.ids];s&&(t+="/"+s.join(","))}else{var a;a=i.config.useCannonicalId?i.config.getCannonicalIdFromElem(r):i.config.getIdFromElem(r),F.isValidId(a)&&!r.singleOne&&(t+="/"+(i.config.encodeIds?encodeURIComponent(a):a))}return e=e.replace(/\/$/,"")+"/"+t,i.normalizeUrl(e)},this.config.baseUrl)},n.prototype.fetchUrl=function(e,r){var t=this.base(e);return r&&(t+="/"+r),t},n.prototype.fetchRequestedUrl=function(e,r){var t=this.fetchUrl(e,r),n=e[F.restangularFields.reqParams];function s(e,r){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,r?"%20":"+")}if(!n)return t+(this.config.suffix||"");var a=[];return function(e,r,t){for(var n=function(e){var r=[];for(var t in e)e.hasOwnProperty(t)&&r.push(t);return r.sort()}(e),s=0;s<n.length;s++)r.call(t,e[n[s]],n[s])}(n,function(e,r){null!=e&&(j.isArray(e)||(e=[e]),j.forEach(e,function(e){j.isObject(e)&&(e=j.toJson(e)),a.push(s(r)+"="+s(e))}))}),t+(this.config.suffix||"")+(-1===t.indexOf("?")?"?":"&")+a.join("&")},F.urlCreatorFactory.path=n};var e={};s.init(this,e),this.$get=["$http","$q",function(S,q){return function t(E){var b={},R=new E.urlCreatorFactory[E.urlCreator];function o(r,e,t,n,s){if(e[E.restangularFields.route]=t,e[E.restangularFields.getRestangularUrl]=R.fetchUrl.bind(R,e),e[E.restangularFields.getRequestedUrl]=R.fetchRequestedUrl.bind(R,e),e[E.restangularFields.addRestangularMethod]=function(e,r,t,s,a,i){var o;o="getList"===r?v.bind(this,t):H.bind(this,r,t);var n=function(e,r,t){var n=j.extend({params:e,headers:r,elem:t},{params:s,headers:a,elem:i});return o(n.params,n.headers,n.elem)};E.isSafe(r)?this[e]=n:this[e]=function(e,r,t){return n(r,t,e)}}.bind(e),e[E.restangularFields.clone]=m.bind(e,e),e[E.restangularFields.reqParams]=n&&j.isObject(n)&&(j.isArray(n)?n:Object.keys(n)).length?n:null,e[E.restangularFields.withHttpConfig]=function(e){return this[E.restangularFields.httpConfig]=e,this}.bind(e),e[E.restangularFields.plain]=C.bind(e,e),e[E.restangularFields.restangularized]=!0,e[E.restangularFields.one]=c.bind(e,e),e[E.restangularFields.all]=f.bind(e,e),e[E.restangularFields.several]=g.bind(e,e),e[E.restangularFields.oneUrl]=p.bind(e,e),e[E.restangularFields.allUrl]=h.bind(e,e),e[E.restangularFields.fromServer]=!!s,r&&E.shouldSaveParent(t)){var a=E.getIdFromElem(r),i=E.getUrlFromElem(r),o=[];["route","singleOne","parentResource"].forEach(function(e){E.restangularFields.hasOwnProperty(e)&&o.push(E.restangularFields[e])});var l=Object.keys(o).map(function(e){return o[e]}),u=j.merge(l,E.extraFields),d={};u.forEach(function(e){r.hasOwnProperty(e)&&(d[e]=r[e])}),E.isValidId(a)&&E.setIdToElem(d,a,t),E.isValidId(i)&&E.setUrlToElem(d,i,t),e[E.restangularFields.parentResource]=d}else e[E.restangularFields.parentResource]=null;return e}function c(e,r,t,n){var s;if(j.isNumber(r)||j.isNumber(e))throw s="You're creating a Restangular entity with the number ",s+="instead of the route or the parent. For example, you can't call .one(12).",new Error(s);if(j.isUndefined(r))throw s="You're creating a Restangular entity either without the path. ",s+="For example you can't call .one(). Please check if your arguments are valid.",new Error(s);var a={};return E.setIdToElem(a,t,r),E.setFieldToElem(E.restangularFields.singleOne,a,n),T(e,a,r,!1)}function f(e,r){return F(e,[],r,!1)}function g(e,r){var t=[];return t[E.restangularFields.ids]=Array.prototype.splice.call(arguments,2),F(e,t,r,!1)}function p(e,r,t){if(!r)throw new Error("Route is mandatory when creating new Restangular objects.");var n={};return E.setUrlToElem(n,t,r),T(e,n,r,!1)}function h(e,r,t){if(!r)throw new Error("Route is mandatory when creating new Restangular objects.");var n={};return E.setUrlToElem(n,t,r),F(e,n,r,!1)}function I(e,r,t){return e.call=n.bind(e),e.get=function(r){var t=q.defer(),n={};return this.then(function(e){n=e[r],t.resolve(n)}),I(t.promise,this[E.restangularFields.restangularCollection],n)}.bind(e),(e[E.restangularFields.restangularCollection]=r)&&(e.push=n.bind(e,"push")),e.$object=t,E.restangularizePromiseInterceptor&&E.restangularizePromiseInterceptor(e),e}function n(t){var n=q.defer(),s=arguments,a={};return this.then(function(e){var r=Array.prototype.slice.call(s,1);e[t].apply(e,r),a=e,n.resolve(e)}),I(n.promise,this[E.restangularFields.restangularCollection],a)}function U(e,r,t,n){if(j.extend(n,t),E.fullResponse)return e.resolve(j.extend(r,{data:t}));e.resolve(t)}function C(e){if(j.isArray(e)){var r=[];return j.forEach(e,function(e){r.push(E.isRestangularized(e)?C(e):e)}),r}var t=j.extend({},e);return Object.keys(E.restangularFields).forEach(function(e){"id"!==e&&delete t[E.restangularFields[e]]}),t}function l(s){s[E.restangularFields.customOperation]=H.bind(s);var r={get:H,delete:H};j.forEach(["put","patch","post"],function(e){r[e]=function(e,r,t,n,s){return H.bind(this)(e,t,n,s,r)}}),j.forEach(r,function(r,t){var n="delete"===t?"remove":t;j.forEach(["do","custom"],function(e){s[E.restangularFields[e+t.toUpperCase()]]=r.bind(s,n)})}),s[E.restangularFields.customGETLIST]=v.bind(s),s[E.restangularFields.doGETLIST]=s[E.restangularFields.customGETLIST]}function m(e){var r=j.copy(e);return j.isArray(e)?F(e[E.restangularFields.parentResource],r,e[E.restangularFields.route],e[E.restangularFields.fromServer],e[E.restangularFields.reqParams]):T(e[E.restangularFields.parentResource],r,e[E.restangularFields.route],e[E.restangularFields.fromServer],e[E.restangularFields.restangularCollection],e[E.restangularFields.reqParams])}function T(e,r,t,n,s,a){var i=o(e,E.onBeforeElemRestangularized(r,!1,t),t,a,n);return E.useCannonicalId&&(i[E.restangularFields.cannonicalId]=E.getIdFromElem(i)),s&&(i[E.restangularFields.getParentList]=function(){return s}),i[E.restangularFields.restangularCollection]=!1,i[E.restangularFields.get]=function(e,r){return u.bind(this)("get",void 0,e,void 0,r)}.bind(i),i[E.restangularFields.getList]=v.bind(i),i[E.restangularFields.put]=function(e,r){return u.bind(this)("put",void 0,e,void 0,r)}.bind(i),i[E.restangularFields.post]=O.bind(i),i[E.restangularFields.remove]=d.bind(i),i[E.restangularFields.head]=P.bind(i),i[E.restangularFields.trace]=x.bind(i),i[E.restangularFields.options]=w.bind(i),i[E.restangularFields.patch]=L.bind(i),i[E.restangularFields.save]=function(e,r){return this[E.restangularFields.fromServer]?this[E.restangularFields.put](e,r):u.bind(this)("post",void 0,e,void 0,r)}.bind(i),l(i),E.transformElem(i,!1,t,b,!0)}function F(e,r,t,n,s){var a=o(e,E.onBeforeElemRestangularized(r,!0,t),t,s,n);return a[E.restangularFields.restangularCollection]=!0,a[E.restangularFields.post]=O.bind(a,null),a[E.restangularFields.remove]=d.bind(a),a[E.restangularFields.head]=P.bind(a),a[E.restangularFields.trace]=x.bind(a),a[E.restangularFields.putElement]=function(t,e,r){var n=this,s=this[t],a=q.defer(),i=[];return i=E.transformElem(i,!0,s[E.restangularFields.route],b),s.put(e,r).then(function(e){var r=m(n);r[t]=e,i=r,a.resolve(r)},function(e){a.reject(e)}),I(a.promise,!0,i)}.bind(a),a[E.restangularFields.options]=w.bind(a),a[E.restangularFields.patch]=L.bind(a),a[E.restangularFields.get]=function(e,r,t){return this.customGET(e.toString(),r,t)}.bind(a),a[E.restangularFields.getList]=v.bind(a,null),l(a),E.transformElem(a,!0,t,b,!0)}function y(e,r,t,n,s,a){var i=E.responseExtractor(e,r,t,n,s,a),o=s.headers("ETag");return i&&o&&(i[E.restangularFields.etag]=o),i}function v(a,e,r){var i=this,o=q.defer(),l="getList",u=R.fetchUrl(this,a),d=a||i[E.restangularFields.route],t=E.fullRequestInterceptor(null,l,d,u,r||{},e||{},this[E.restangularFields.httpConfig]||{}),c=[];c=E.transformElem(c,!0,d,b);var n="getList";E.jsonp&&(n="jsonp");var s=function(e){var r=e.data,t=e.config.params,n=y(r,l,d,u,e,o);if((j.isUndefined(n)||""===n)&&(n=[]),!j.isArray(n))throw new Error("Response for getList SHOULD be an array and not an object or something else");if(!0===E.plainByDefault)return U(o,e,n,c);var s=n.map(function(e){return i[E.restangularFields.restangularCollection]?T(i[E.restangularFields.parentResource],e,i[E.restangularFields.route],!0,n):T(i,e,a,!0,n)});s=j.extend(n,s),i[E.restangularFields.restangularCollection]?U(o,e,F(i[E.restangularFields.parentResource],s,i[E.restangularFields.route],!0,t),c):U(o,e,F(i,s,a,!0,t),c)};return R.resource(this,S,t.httpConfig,t.headers,t.params,a,this[E.restangularFields.etag],l)[n]().then(s,function(r){304===r.status&&i[E.restangularFields.restangularCollection]?U(o,r,i,c):E.errorInterceptors.every(function(e){return!1!==e(r,o,s)})&&o.reject(r)}),I(o.promise,!0,c)}function u(a,e,r,t,n){var i=this,o=q.defer(),s=r||{},l=e||this[E.restangularFields.route],u=R.fetchUrl(this,e),d=t||this,c=d[E.restangularFields.etag]||("post"!==a?this[E.restangularFields.etag]:null);j.isObject(d)&&E.isRestangularized(d)&&(d=C(d));var f=E.fullRequestInterceptor(d,a,l,u,n||{},s||{},this[E.restangularFields.httpConfig]||{}),g={};g=E.transformElem(g,!1,l,b);var p=function(e){var r=e.data,t=e.config.params,n=y(r,a,l,u,e,o);if(null!=n&&""!==n){var s;if(!0===E.plainByDefault)return U(o,e,n,g);"post"!==a||i[E.restangularFields.restangularCollection]?(s=T(i[E.restangularFields.parentResource],n,i[E.restangularFields.route],!0,null,t))[E.restangularFields.singleOne]=i[E.restangularFields.singleOne]:s=T(i[E.restangularFields.parentResource],n,l,!0,null,t),U(o,e,s,g)}else U(o,e,void 0,g)},h=function(r){304===r.status&&E.isSafe(a)?U(o,r,i,g):E.errorInterceptors.every(function(e){return!1!==e(r,o,p)})&&o.reject(r)},m=a,F=j.extend({},f.headers),v=E.isOverridenMethod(a);return v?(m="post",F=j.extend(F,{"X-HTTP-Method-Override":"remove"===a?"DELETE":a.toUpperCase()})):E.jsonp&&"get"===m&&(m="jsonp"),E.isSafe(a)?v?R.resource(this,S,f.httpConfig,F,f.params,e,c,m)[m]({}).then(p,h):R.resource(this,S,f.httpConfig,F,f.params,e,c,m)[m]().then(p,h):R.resource(this,S,f.httpConfig,F,f.params,e,c,m)[m](f.element).then(p,h),I(o.promise,!1,g)}function d(e,r){return u.bind(this)("remove",void 0,e,void 0,r)}function O(e,r,t,n){return u.bind(this)("post",e,t,r,n)}function P(e,r){return u.bind(this)("head",void 0,e,void 0,r)}function x(e,r){return u.bind(this)("trace",void 0,e,void 0,r)}function w(e,r){return u.bind(this)("options",void 0,e,void 0,r)}function L(e,r,t){return u.bind(this)("patch",void 0,r,e,t)}function H(e,r,t,n,s){return u.bind(this)(e,r,t,s,n)}return R.setConfig(E),s.init(b,E),b.copy=m.bind(b),b.service=function(e,r){var t=Object.keys(E.restangularFields).map(function(e){return E.restangularFields[e]}),n={},s=(r||b).all(e);for(var a in n.one=c.bind(r||b,r,e),n.post=s.post.bind(s),n.getList=s.getList.bind(s),n.withHttpConfig=s.withHttpConfig.bind(s),n.get=s.get.bind(s),s)s.hasOwnProperty(a)&&j.isFunction(s[a])&&t.indexOf(a)<0&&(n[a]=s[a].bind(s));return n}.bind(b),b.withConfig=function(e){var r=j.copy(E);return delete r.configuration,s.init(r,r),e(r),t(r)}.bind(b),b.one=c.bind(b,null),b.all=f.bind(b,null),b.several=g.bind(b,null),b.oneUrl=p.bind(b,null),b.allUrl=h.bind(b,null),b.stripRestangular=C.bind(b),b.restangularizeElement=T.bind(b),b.restangularizeCollection=function(r,e,t,n){var s=F(r,e,t,n);return j.forEach(s,function(e){e&&T(r,e,t,n)}),s}.bind(b),b}(e)}]}),e.name});