restapi 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/Gemfile +2 -1
  2. data/Gemfile.lock +83 -64
  3. data/README.rdoc +375 -2
  4. data/app/controllers/restapi/restapis_controller.rb +21 -3
  5. data/app/helpers/restapi/restapis_helper.rb +31 -0
  6. data/app/public/restapi/javascripts/bundled/prettify.js +28 -0
  7. data/app/public/restapi/javascripts/restapi.js +4 -13
  8. data/app/public/restapi/stylesheets/bundled/prettify.css +30 -0
  9. data/app/views/layouts/restapi/restapi.html.erb +36 -0
  10. data/app/views/restapi/restapis/index.html.erb +35 -33
  11. data/app/views/restapi/restapis/method.html.erb +59 -0
  12. data/app/views/restapi/restapis/resource.html.erb +71 -0
  13. data/app/views/restapi/restapis/static.html.erb +103 -0
  14. data/lib/restapi.rb +0 -10
  15. data/lib/restapi/application.rb +25 -10
  16. data/lib/restapi/dsl_definition.rb +38 -32
  17. data/lib/restapi/markup.rb +12 -12
  18. data/lib/restapi/method_description.rb +10 -8
  19. data/lib/restapi/param_description.rb +23 -10
  20. data/lib/restapi/resource_description.rb +1 -1
  21. data/lib/restapi/restapi_module.rb +15 -0
  22. data/lib/restapi/validator.rb +37 -14
  23. data/lib/restapi/version.rb +1 -1
  24. data/lib/tasks/restapi.rake +157 -0
  25. data/restapi.gemspec +1 -1
  26. data/spec/controllers/restapis_controller_spec.rb +84 -0
  27. data/spec/controllers/users_controller_spec.rb +273 -221
  28. data/spec/dummy/app/controllers/twitter_example_controller.rb +209 -208
  29. data/spec/dummy/app/controllers/users_controller.rb +23 -33
  30. data/spec/dummy/config/initializers/restapi.rb +45 -23
  31. data/spec/dummy/config/routes.rb +12 -7
  32. metadata +26 -15
  33. data/app/public/restapi/javascripts/bundled/backbone.js +0 -1431
  34. data/app/public/restapi/javascripts/bundled/json2.js +0 -487
  35. data/app/public/restapi/javascripts/bundled/underscore.js +0 -999
  36. data/app/public/restapi/javascripts/jst.js +0 -127
  37. data/app/public/restapi/javascripts/routers/documentation_router.js +0 -52
  38. data/app/public/restapi/stylesheets/bundled/bootstrap-responsive.css +0 -686
  39. data/app/public/restapi/stylesheets/bundled/bootstrap.css +0 -3990
  40. data/spec/dummy/app/controllers/dogs_controller.rb +0 -20
  41. data/spec/dummy/app/helpers/application_helper.rb +0 -2
@@ -1,13 +1,31 @@
1
1
  module Restapi
2
2
  class RestapisController < ActionController::Base
3
- layout false
3
+ layout 'restapi/restapi'
4
4
 
5
5
  def index
6
6
  respond_to do |format|
7
+
8
+ Restapi.reload_documentation if Restapi.configuration.reload_controllers?
9
+ @doc = Restapi.to_json(params[:resource], params[:method])
10
+
7
11
  format.json do
8
- render :json => Restapi.to_json(params[:resource], params[:method])
12
+ render :json => @doc
13
+ end
14
+
15
+ format.html do
16
+
17
+ @doc = @doc[:docs]
18
+ if params[:resource].present? && params[:method].present?
19
+ @resource = @doc[:resources].first
20
+ @method = @resource[:methods].first
21
+ render 'method'
22
+ elsif params[:resource].present?
23
+ @resource = @doc[:resources].first
24
+ render 'resource'
25
+ else
26
+ render 'index'
27
+ end
9
28
  end
10
- format.html
11
29
  end
12
30
  end
13
31
 
@@ -0,0 +1,31 @@
1
+ module Restapi
2
+ module RestapisHelper
3
+
4
+ def print_nested_params(param, level=0)
5
+ content = ''
6
+
7
+ unless param[:params].blank?
8
+ param[:params].each do |val|
9
+ col = 255 - level*5
10
+ content << "<tr style='background-color:rgb(#{col},#{col},#{col});'><td>"
11
+ content << ("<strong>#{val[:full_name]}</strong><br>")
12
+ content << "<small>"
13
+ content << (val[:required] ? 'required' : 'optional')
14
+ content << (val[:allow_nil] ? ', nil allowed' : '')
15
+ content << "</small>"
16
+ content << "</td><td>"
17
+ content << val[:description].html_safe
18
+ content << "<br>"
19
+ unless val[:validator].blank?
20
+ content << "Value: #{val[:validator]}"
21
+ end
22
+ content << "</td></tr>"
23
+
24
+ content << print_nested_params(val, level+1) unless val[:params].blank?
25
+ end
26
+ end
27
+ content.html_safe
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
2
+ (function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
3
+ [],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
4
+ f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
5
+ (j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
6
+ {b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
7
+ t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
8
+ "string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
9
+ l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
10
+ q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
11
+ q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
12
+ "");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
13
+ a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
14
+ for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
15
+ m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
16
+ a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
17
+ j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
18
+ "catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
19
+ H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
20
+ J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
21
+ I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
22
+ ["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
23
+ /^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
24
+ ["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
25
+ hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
26
+ !k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
27
+ 250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
28
+ PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
@@ -1,15 +1,6 @@
1
- var Restapi = {
2
- Routers: {},
3
- Templates: {},
4
- Rendered: false,
5
-
6
- init: function() {
7
- new Restapi.Routers.Documentation();
8
- var base = window.location.pathname;
9
- Backbone.history.start({root: base});
10
- }
11
- };
12
-
13
1
  $(document).ready(function() {
14
- Restapi.init();
2
+ if (typeof prettyPrint == 'function') {
3
+ $('pre.ruby').addClass('prettyprint lang-rb');
4
+ prettyPrint();
5
+ }
15
6
  });
@@ -0,0 +1,30 @@
1
+ .com { color: #93a1a1; }
2
+ .lit { color: #195f91; }
3
+ .pun, .opn, .clo { color: #93a1a1; }
4
+ .fun { color: #dc322f; }
5
+ .str, .atv { color: #D14; }
6
+ .kwd, .linenums .tag { color: #1e347b; }
7
+ .typ, .atn, .dec, .var { color: teal; }
8
+ .pln { color: #48484c; }
9
+
10
+ .prettyprint {
11
+ padding: 8px;
12
+ background-color: #f7f7f9;
13
+ border: 1px solid #e1e1e8;
14
+ }
15
+ .prettyprint.linenums {
16
+ -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
17
+ -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
18
+ box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
19
+ }
20
+
21
+ /* Specify class=linenums on a pre to get line numbering */
22
+ ol.linenums {
23
+ margin: 0 0 0 33px; /* IE indents via margin-left */
24
+ }
25
+ ol.linenums li {
26
+ padding-left: 12px;
27
+ color: #bebec5;
28
+ line-height: 18px;
29
+ text-shadow: 0 1px 0 #fff;
30
+ }
@@ -0,0 +1,36 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>API documentation</title>
5
+ <% %w[bundled/bootstrap.min.css
6
+ application.css
7
+ bundled/prettify.css
8
+ bundled/bootstrap-responsive.min.css ].each do |file| %>
9
+ <link type="text/css" rel="stylesheet"
10
+ href="<%= Restapi.full_url("stylesheets/#{file}") %>"/>
11
+ <% end %>
12
+ <!-- IE6-8 support of HTML5 elements -->
13
+ <!--[if lt IE 9]>
14
+ <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
15
+ <![endif]-->
16
+ </head>
17
+ <body>
18
+ <div class="container">
19
+ <div class="row">
20
+ <div id='container'>
21
+ <%= yield %>
22
+ </div>
23
+ </div>
24
+ <hr>
25
+ <footer><%= yield :restapi_footer %></footer>
26
+ </div>
27
+ <% %w[
28
+ bundled/jquery-1.7.2.js
29
+ bundled/bootstrap-collapse.js
30
+ bundled/prettify.js
31
+ restapi.js ].each do |file| %>
32
+ <script type="text/javascript"
33
+ src="<%= Restapi.full_url("javascripts/#{file}") %>"></script>
34
+ <% end %>
35
+ </body>
36
+ </html>
@@ -1,34 +1,36 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>API documentation</title>
5
- <% %w[bundled/bootstrap.css application.css bundled/bootstrap-responsive.css].each do |file| %>
6
- <link type="text/css" rel="stylesheet" href="<%= Restapi.full_url("stylesheets/#{file}") %>"/>
7
- <% end %>
8
- <!-- IE6-8 support of HTML5 elements -->
9
- <!--[if lt IE 9]>
10
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
- <![endif]-->
12
- </head>
13
- <body>
14
- <div class="container">
15
- <div class="row">
16
- <div id='container'></div>
17
- </div>
18
- <hr>
19
- <footer></footer>
20
- </div>
21
- <% %w[
22
- bundled/jquery-1.7.2.js
23
- bundled/json2.js
24
- bundled/underscore.js
25
- bundled/backbone.js
26
- bundled/bootstrap-collapse.js
1
+ <ul class='breadcrumb'>
2
+ <li class='active'><a href='<%= @doc[:doc_url] %>'><%= @doc[:name] %></a></li>
3
+ </ul>
27
4
 
28
- restapi.js
29
- jst.js
30
- routers/documentation_router.js ].each do |file| %>
31
- <script type="text/javascript" src="<%= Restapi.full_url("javascripts/#{file}") %>"></script>
32
- <% end %>
33
- </body>
34
- </html>
5
+ <div><%= @doc[:info].html_safe %></div>
6
+
7
+ <h1 class='page-header'>Resources</h1>
8
+
9
+ <% @doc[:resources].each do |key, api| %>
10
+ <h2>
11
+ <a href='<%= api[:doc_url] %>'><%= api[:name] %></a><br>
12
+ <small><%= api[:short_description] %></small>
13
+ </h2>
14
+ <table class='table'>
15
+ <thead>
16
+ <tr>
17
+ <th>Resource</th>
18
+ <th>Description</th>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <% api[:methods].each do |m| %>
23
+ <% m[:apis].each do |a| %>
24
+ <tr>
25
+ <td><a href='<%= m[:doc_url] %>'><%= a[:http_method] %> <%= a[:api_url] %></a></td>
26
+ <td width='60%'><%= a[:short_description] %></td>
27
+ </tr>
28
+ <% end %>
29
+ <% end %>
30
+ </tbody>
31
+ </table>
32
+ <% end %>
33
+
34
+ <% content_for :restapi_footer do %>
35
+ <%= raw @doc[:copyright] %>
36
+ <% end %>
@@ -0,0 +1,59 @@
1
+ <ul class='breadcrumb'>
2
+ <li>
3
+ <a href='<%= @doc[:doc_url] %>'><%= @doc[:name] %></a>
4
+ <span class='divider'>/</span>
5
+ </li>
6
+ <li>
7
+ <a href='<%= @resource[:doc_url] %>'><%= @resource[:name] %></a>
8
+ <span class='divider'>/</span>
9
+ </li>
10
+ <li class='active'><%= @method[:name] %></li>
11
+ </ul>
12
+
13
+ <% @method[:apis].each do |api| %>
14
+ <div class='page-header'>
15
+ <h1>
16
+ <%= api[:http_method] %> <%= api[:api_url] %><br>
17
+ <small><%= raw api[:short_description] %></small>
18
+ </h1>
19
+ </div>
20
+ <% end %>
21
+
22
+ <div>
23
+ <%= raw @method[:full_description] %>
24
+
25
+ <% unless @method[:examples].blank? %>
26
+ <h2>Examples</h2>
27
+ <% @method[:examples].each do |example| %>
28
+ <pre><%= example %></pre>
29
+ <% end %>
30
+ <% end %>
31
+
32
+ <% unless @method[:errors].blank? %>
33
+ <h2>Errors</h2>
34
+ <% @method[:errors].each do |err| %>
35
+ <%= err.code %>
36
+ <%= err.description %>
37
+ <br>
38
+ <% end %>
39
+ <% end %>
40
+
41
+ <% unless @method[:params].blank? %>
42
+ <h2>Params</h2>
43
+ <table class='table'>
44
+ <thead>
45
+ <tr>
46
+ <th>Param name</th>
47
+ <th>Description</th>
48
+ </tr>
49
+ </thead>
50
+ <tbody>
51
+ <%= print_nested_params(@method) %>
52
+ </tbody>
53
+ </table>
54
+ <% end %>
55
+ </div>
56
+
57
+ <% content_for :restapi_footer do %>
58
+ <%= raw @doc[:copyright] %>
59
+ <% end %>
@@ -0,0 +1,71 @@
1
+ <ul class='breadcrumb'>
2
+ <li><a href='<%= @doc[:doc_url] %>'><%= @doc[:name] %></a><span class='divider'>/</span></li>
3
+ <li class='active'><%= @resource[:name] %></li>
4
+ </ul>
5
+
6
+ <div class='page-header'>
7
+ <h1>
8
+ <%= @resource[:name] %><br>
9
+ <small><%= raw @resource[:short_description] %></small>
10
+ </h1>
11
+ </div>
12
+
13
+
14
+ <% unless @resource[:full_description].blank? %>
15
+ <div><%= raw @resource[:full_description] %></div>
16
+ <% end %>
17
+
18
+ <div class='accordion' id='accordion'>
19
+
20
+ <% @resource[:methods].each do |m| %>
21
+ <hr>
22
+ <div class='pull-right small'>
23
+ <a href='<%= m[:doc_url] %>'> >>> </a>
24
+ </div>
25
+ <div>
26
+ <% m[:apis].each do |api| %>
27
+ <h2>
28
+ <a href='#description-<%= m[:name] %>'
29
+ class='accordion-toggle'
30
+ data-toggle='collapse'
31
+ data-parent='#accordion'>
32
+ <%= api[:http_method] %> <%= api[:api_url] %>
33
+ </a><br>
34
+ <small><%= raw api[:short_description] %></small>
35
+ </h2>
36
+ <% end %>
37
+ </div>
38
+
39
+ <div id='description-<%= m[:name] %>' class='collapse accordion-body'>
40
+
41
+ <%= raw m[:full_description] %>
42
+ <% unless m[:errors].blank? %>
43
+ <h3>Errors</h3>
44
+ <% m[:errors].each do |err| %>
45
+ <%= err.code %>
46
+ <%= err.description %>
47
+ <br>
48
+ <% end %>
49
+ <% end %>
50
+
51
+ <% unless m[:params].blank? %>
52
+ <h3>Params</h3>
53
+ <table class='table'>
54
+ <thead>
55
+ <tr>
56
+ <th>Param name</th>
57
+ <th>Description</th>
58
+ </tr>
59
+ </thead>
60
+ <tbody>
61
+ <%= print_nested_params(m) %>
62
+ </tbody>
63
+ </table>
64
+ <% end %>
65
+ </div>
66
+ <% end %>
67
+ </div>
68
+
69
+ <% content_for :restapi_footer do %>
70
+ <%= raw @doc[:copyright] %>
71
+ <% end %>
@@ -0,0 +1,103 @@
1
+ <% @doc = doc %>
2
+
3
+ <% @doc[:resources].each do |key, resource| %>
4
+ <h4><a href='#<%= key %>'><%= resource[:name] %></a></h4>
5
+ <ul>
6
+ <% resource[:methods].each do |method| %>
7
+ <li><a href='#<%= key %>-<%= method[:name] %>'><%= method[:name] %></a></li>
8
+ <% end %>
9
+ </ul>
10
+ <% end %>
11
+
12
+
13
+
14
+ <div><%= @doc[:info].html_safe %></div>
15
+
16
+ <hr>
17
+
18
+ <% @doc[:resources].each do |key, resource| %>
19
+
20
+ <ul class='breadcrumb' id='<%= key %>'>
21
+ <li><a href='#'><%= @doc[:name] %></a><span class='divider'>/</span></li>
22
+ <li class='active'><%= resource[:name] %></li>
23
+ </ul>
24
+
25
+ <div class='page-header'>
26
+ <h1>
27
+ <a href='#<%= key %>'><%= resource[:name] %></a><br>
28
+ <small><%= raw resource[:short_description] %></small>
29
+ </h1>
30
+ </div>
31
+
32
+ <% unless resource[:full_description].blank? %>
33
+ <div><%= raw resource[:full_description] %></div>
34
+ <% end %>
35
+
36
+ <div class='accordion' id='accordion'>
37
+
38
+ <% resource[:methods].each do |method| %>
39
+ <hr>
40
+
41
+ <ul class='breadcrumb' id='<%= key %>-<%= method[:name] %>'>
42
+ <li>
43
+ <a href='#'><%= @doc[:name] %></a>
44
+ <span class='divider'>/</span>
45
+ </li>
46
+ <li>
47
+ <a href='#<%= key %>'><%= resource[:name] %></a>
48
+ <span class='divider'>/</span>
49
+ </li>
50
+ <li class='active'><%= method[:name] %></li>
51
+ </ul>
52
+
53
+ <div>
54
+ <% method[:apis].each do |api| %>
55
+ <h3>
56
+ <a href='#<%= key %>-<%= method[:name] %>'>
57
+ <%= api[:http_method] %> <%= api[:api_url] %>
58
+ </a><br>
59
+ <small><%= raw api[:short_description] %></small>
60
+ </h3>
61
+ <% end %>
62
+ </div>
63
+
64
+ <div>
65
+ <%= raw method[:full_description] %>
66
+ <% unless method[:examples].blank? %>
67
+ <h2>Examples</h2>
68
+ <% method[:examples].each do |example| %>
69
+ <pre><%= example %></pre>
70
+ <% end %>
71
+ <% end %>
72
+
73
+ <% unless method[:errors].blank? %>
74
+ <h2>Errors</h2>
75
+ <% method[:errors].each do |err| %>
76
+ <%= err.code %>
77
+ <%= err.description %>
78
+ <br>
79
+ <% end %>
80
+ <% end %>
81
+
82
+ <% unless method[:params].blank? %>
83
+ <h2>Params</h2>
84
+ <table class='table'>
85
+ <thead>
86
+ <tr>
87
+ <th>Param name</th>
88
+ <th>Description</th>
89
+ </tr>
90
+ </thead>
91
+ <tbody>
92
+ <%= print_nested_params(method) %>
93
+ </tbody>
94
+ </table>
95
+ <% end %>
96
+ </div>
97
+ <% end %>
98
+ </div>
99
+ <% end %>
100
+
101
+ <% content_for :restapi_footer do %>
102
+ <%= raw @doc[:copyright] %>
103
+ <% end %>