-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcrude-min.js
11 lines (11 loc) · 3.11 KB
/
crude-min.js
1
2
3
4
5
6
7
8
9
10
11
/*
Copyright (c) 2011, Vladimir Agafonkin, CloudMade
Crude (v0.1) is a clever JavaScript library for working with RESTful services.
See https://github.com/CloudMade/Crude for more information.
*/
(function(h){var c={version:"0.1"},i=h.Crude;typeof module!=="undefined"&&module.exports?module.exports=c:h.Crude=c;c.noConflict=function(){h.Crude=i;return this};c.api=function(a,b,d){return new c.Api(a,b,d)};c.Api=function(a,b,d){this.baseUrl=a;this.format=b;this.requestFn=d;this.NestedResources=function(){c.Resources.apply(this,arguments)};c.inherit(this.NestedResources,c.Resources);this.nestedResources=this.NestedResources.prototype};c.Api.prototype={request:function(a,b,d){!d&&typeof b!=="string"&&
(d=b,b="get");d=d||{};a=this.baseUrl+"/"+a+"."+this.format;a=c.template(a,d,!0);return this.requestFn(a,b,d)},resources:function(a,b){b=b||c.pluralize(a);return this[b]=new c.Resources(this,a,b)}};c.Resources=function(a,b,d,c){this.api=a;this.name=b;this.pluralName=d;this.prefix=c};c.Resources.prototype={request:function(a,b,d){return this.api.request((this.prefix?this.prefix+"/":"")+this.pluralName+(a?"/"+a:""),b,d)},get:function(a,b){!b&&typeof a==="object"&&(b=a,a=null);return this.request(a||
"","get",b)},create:function(a,b){a=c.wrapKeys(a,this.name);b=c.extend({},b,a);return this.request("","post",b)},update:function(a,b,d){b=c.wrapKeys(b,this.name);d=c.extend({},d,b);return this.request(a,"put",d)},del:function(a,b){return this.request(a,"delete",b)},belongTo:function(a){function b(){e.apply(this,arguments)}var d="in"+c.capitalize(a.name),e=this.api.NestedResources,f=a.name+c.capitalize(this.pluralName);c.inherit(b,e);this.api[f]=b.prototype;this[d]=function(d){return new b(this.api,
this.name,this.pluralName,a.pluralName+"/"+d)};return this},collectionAction:function(a,b){b=c.extend({method:"get",path:a},b);this[a]=function(a){b.argsToData&&(a=b.argsToData.apply(null,arguments));return this.request(b.path,b.method,a)};return this},memberAction:function(a,b){b=c.extend({method:"get",path:a},b);this[a]=function(a,c){if(b.argsToData)var f=Array.prototype.slice.call(arguments,1),c=b.argsToData.apply(null,f);return this.request(a+"/"+b.path,b.method,c)};return this}};c.inherit=function(a,
b){function c(){}c.prototype=b.prototype;var e=new c;e.constructor=a;a.prototype=e};c.pluralRules=[[/$/,"s"],[/s$/i,"s"],[/(?:([^f])fe|([lr])f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/(x|ch|s|sh)$/i,"$1es"],["child","children"]];c.pluralize=function(a){for(var b=c.pluralRules,d=b.length,e;d;)if(d-=1,e=b[d],typeof e[0]==="string"){if(a===e[0])return e[1]}else if(e[0].test(a))return a.replace(e[0],e[1]);return a};c.capitalize=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};c.extend=function(a){var b=
Array.prototype.slice.call(arguments,1),c=b.length,e,f,g;for(g=0;g<c;g+=1)for(f in e=b[g]||{},e)e.hasOwnProperty(f)&&(a[f]=e[f]);return a};c.wrapKeys=function(a,b){var c={},e;for(e in a)a.hasOwnProperty(e)&&(c[b+"["+e+"]"]=a[e]);return c};c.template=function(a,b,c){return a.replace(/\{ *([^} ]+) *\}/g,function(a,f){var g=b[f];if(!b.hasOwnProperty(f))throw Error("No value provided for variable "+a);c&&delete b[f];return g})}})(this);