rapid-core 0.1 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile.lock +35 -2
- data/Rakefile +77 -48
- data/doc/server.txt +15 -0
- data/features/settings/double-nested/default.feature +2 -2
- data/features/settings/double-nested/validates/presence_of.feature +1 -1
- data/features/settings/nested/default.feature +1 -1
- data/features/settings/nested/validates/presence_of.feature +1 -1
- data/features/settings/not_found.feature +2 -2
- data/features/step_definitions/settings_steps.rb +7 -3
- data/features/step_definitions/template_steps.rb +3 -1
- data/lib/rapid/check.rb +30 -23
- data/lib/rapid/core.rb +12 -0
- data/lib/rapid/error.rb +1 -0
- data/lib/rapid/module.rb +10 -1
- data/lib/rapid/railtie.rb +6 -0
- data/lib/rapid/setting/base.rb +31 -8
- data/lib/rapid/setting/boolean_setting.rb +20 -1
- data/lib/rapid/setting/definer.rb +11 -47
- data/lib/rapid/setting/integer_setting.rb +7 -7
- data/lib/rapid/setting/module.rb +56 -0
- data/lib/rapid/setting/namespace/base.rb +35 -60
- data/lib/rapid/setting/namespace/instance.rb +195 -28
- data/lib/rapid/setting/string_setting.rb +7 -1
- data/lib/rapid/settings.rb +51 -65
- data/lib/rapid/skeleton/base.rb +39 -18
- data/lib/rapid/skeleton/helpers/directory.rb +5 -6
- data/lib/rapid/skeleton/helpers/files.rb +62 -0
- data/lib/rapid/skeleton/helpers/gem.rb +43 -32
- data/lib/rapid/skeleton/helpers/if_setting.rb +44 -0
- data/lib/rapid/skeleton/helpers/migration.rb +102 -32
- data/lib/rapid/skeleton/helpers/route.rb +8 -12
- data/lib/rapid/skeleton/helpers/script.rb +1 -2
- data/lib/rapid/skeleton/helpers/template.rb +23 -25
- data/lib/rapid/skeleton/helpers/view.rb +7 -7
- data/lib/rapid/spec/template.rb +1 -1
- data/lib/rapid/version.rb +1 -1
- data/lib/rapid/web/base.rb +35 -0
- data/lib/rapid/web/bootstrap.rb +98 -0
- data/lib/rapid/web/controller_helpers.rb +60 -0
- data/lib/rapid/web/navigator.rb +18 -0
- data/lib/rapid/web/select_helpers.rb +63 -0
- data/lib/rapid/web/settings_form_builder.rb +205 -0
- data/lib/rapid/web/static_helpers.rb +28 -0
- data/lib/rapid/web/tasks.rb +10 -0
- data/public/rapid/core/bootstrap-collapse.js +136 -0
- data/public/rapid/core/bootstrap-responsive.min.css +3 -0
- data/public/rapid/core/bootstrap.min.css +556 -0
- data/public/rapid/core/jquery-1.7.1.js +9253 -0
- data/public/rapid/core/prettify.css +30 -0
- data/public/rapid/core/prettify.js +28 -0
- data/rapid-core.gemspec +5 -0
- data/spec/rapid/check_spec.rb +11 -4
- data/spec/rapid/module_spec.rb +18 -0
- data/spec/rapid/setting/base_spec.rb +71 -0
- data/spec/rapid/setting/boolean_setting_spec.rb +95 -0
- data/spec/rapid/setting/definer_spec.rb +7 -13
- data/spec/rapid/setting/integer_setting_spec.rb +49 -0
- data/spec/rapid/setting/module_spec.rb +25 -0
- data/spec/rapid/setting/namespace/base_spec.rb +88 -54
- data/spec/rapid/setting/namespace/instance_spec.rb +308 -5
- data/spec/rapid/setting/string_setting_spec.rb +43 -0
- data/spec/rapid/settings_spec.rb +65 -17
- data/spec/rapid/skeleton/base_spec.rb +113 -7
- data/spec/rapid/skeleton/helpers/directory_spec.rb +8 -6
- data/spec/rapid/skeleton/helpers/files_spec.rb +93 -0
- data/spec/rapid/skeleton/helpers/gem_spec.rb +65 -36
- data/spec/rapid/skeleton/helpers/if_setting_spec.rb +110 -0
- data/spec/rapid/skeleton/helpers/migration_spec.rb +190 -1
- data/spec/rapid/skeleton/helpers/route_spec.rb +13 -12
- data/spec/rapid/skeleton/helpers/script_spec.rb +2 -1
- data/spec/rapid/skeleton/helpers/template_spec.rb +22 -35
- data/spec/rapid/spec/template_spec.rb +1 -1
- data/spec/rapid/web/base_spec.rb +33 -0
- data/spec/rapid/web/bootstrap_spec.rb +72 -0
- data/spec/rapid/web/controller_helpers_spec.rb +86 -0
- data/spec/rapid/web/navigator_spec.rb +17 -0
- data/spec/rapid/web/select_helpers_spec.rb +71 -0
- data/spec/rapid/web/settings_form_builder_spec.rb +255 -0
- data/spec/rapid/web/static_helpers_spec.rb +26 -0
- data/spec/spec_helper.rb +3 -0
- data/views/index.erb +11 -0
- data/views/layout.erb +9 -0
- metadata +107 -12
- data/lib/rapid.rb +0 -37
- data/lib/rapid/setting/class_hash.rb +0 -34
- data/lib/rapid/setting/instance_hash.rb +0 -132
- data/lib/rapid/setting/instance_root.rb +0 -107
- data/spec/rapid/setting/instance_root_spec.rb +0 -161
@@ -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,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"}})();
|
data/rapid-core.gemspec
CHANGED
@@ -23,4 +23,9 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency("activemodel", ">= 3.0")
|
24
24
|
s.add_dependency("i18n")
|
25
25
|
s.add_dependency("erubis")
|
26
|
+
s.add_dependency("sinatra")
|
27
|
+
s.add_dependency("tzinfo")
|
28
|
+
s.add_dependency("sinatra_more")
|
29
|
+
|
30
|
+
s.add_development_dependency("sinatra-reloader")
|
26
31
|
end
|
data/spec/rapid/check_spec.rb
CHANGED
@@ -104,16 +104,23 @@ describe Rapid::Check do
|
|
104
104
|
@check.error_count.should == 1
|
105
105
|
end
|
106
106
|
|
107
|
+
it "should log values" do
|
108
|
+
@check = Rapid::Check.new %(
|
109
|
+
Rapid::Check.current.log_value :info, 'foo', 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'
|
110
|
+
), :console => true
|
111
|
+
|
112
|
+
Rapid.should_receive(:color_puts).with(:info, %( foo: "abcdefghijklmnopqrstuvwx...defghijklmnopqrstuvwxyz"))
|
113
|
+
@check.valid?
|
114
|
+
end
|
115
|
+
|
107
116
|
end
|
108
117
|
|
109
118
|
it "should tell whether encounters an error" do
|
110
119
|
@check = Rapid::Check.new ""
|
111
|
-
|
112
|
-
Rapid::Check.encounters_error? { @check.error 'hi', 'hi' }.should == true
|
120
|
+
@check.encounters_error? { @check.error 'hi', 'hi' }.should == true
|
113
121
|
|
114
122
|
@check = Rapid::Check.new ""
|
115
|
-
|
116
|
-
Rapid::Check.encounters_error? { @check.warning 'hi', 'hi' }.should == false
|
123
|
+
@check.encounters_error? { @check.warning 'hi', 'hi' }.should == false
|
117
124
|
end
|
118
125
|
|
119
126
|
end
|
data/spec/rapid/module_spec.rb
CHANGED
@@ -19,10 +19,28 @@ describe Rapid do
|
|
19
19
|
Rapid.color_puts :error, "hi"
|
20
20
|
end
|
21
21
|
|
22
|
+
it "should puts info" do
|
23
|
+
Rapid.should_receive(:puts).with("\e[90mhi\e[0m")
|
24
|
+
Rapid.color_puts :info, "hi"
|
25
|
+
end
|
26
|
+
|
22
27
|
it "should raise an error when invalid type" do
|
23
28
|
lambda { Rapid.color_puts(:invalid, "hi") }.should raise_error
|
24
29
|
end
|
25
30
|
|
26
31
|
end
|
27
32
|
|
33
|
+
describe "middleware" do
|
34
|
+
|
35
|
+
after do
|
36
|
+
Rapid.middleware = nil
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should use" do
|
40
|
+
Rapid.use_middleware Object
|
41
|
+
Rapid.middleware.should == [Object]
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
28
46
|
end
|
@@ -14,4 +14,75 @@ describe Rapid::Setting::Base do
|
|
14
14
|
lambda { Rapid::Setting::Base.new("valid") }.should raise_error(ArgumentError)
|
15
15
|
end
|
16
16
|
|
17
|
+
it "should tell its parent namespace it exists" do
|
18
|
+
@namespace = mock('namespace', :full_name => 'foo')
|
19
|
+
@namespace.should_receive(:add_child)
|
20
|
+
|
21
|
+
@setting = Rapid::Setting::Base.new('hi', :namespace => @namespace)
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "full_name" do
|
25
|
+
|
26
|
+
it "should be just the name when no parent" do
|
27
|
+
@setting = Rapid::Setting::Base.new("hi")
|
28
|
+
@setting.full_name.should == "hi"
|
29
|
+
@setting.name.should == :hi
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should be include the parent name when a child" do
|
33
|
+
@namespace = mock('parent', :full_name => 'foo', :add_child => nil)
|
34
|
+
@setting = Rapid::Setting::Base.new("hi", :namespace => @namespace)
|
35
|
+
@setting.full_name.should == "foo.hi"
|
36
|
+
@setting.name.should == :hi
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "default_value" do
|
42
|
+
|
43
|
+
it "should save the default value" do
|
44
|
+
@setting = Rapid::Setting::Base.new("hi", :default => "foo")
|
45
|
+
@setting.default_value.should == "foo"
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "define_helpers" do
|
51
|
+
|
52
|
+
before do
|
53
|
+
Object.class_eval do
|
54
|
+
class MyClass
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
@setting = Rapid::Setting::Base.new("hi")
|
60
|
+
@setting.define_helpers MyClass
|
61
|
+
@instance = MyClass.new
|
62
|
+
end
|
63
|
+
|
64
|
+
after do
|
65
|
+
Object.send(:remove_const, :MyClass) rescue nil
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should define a getter" do
|
69
|
+
@instance.should_receive(:[]).and_return("foo")
|
70
|
+
@instance.hi.should == "foo"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should definer a getter with a ?" do
|
74
|
+
@instance.should_receive(:[]).and_return("foo")
|
75
|
+
@instance.hi?.should == true
|
76
|
+
|
77
|
+
@instance.should_receive(:[]).and_return(nil)
|
78
|
+
@instance.hi?.should == false
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should definer a setter" do
|
82
|
+
@instance.should_receive(:[]=).with(:hi, 'foo')
|
83
|
+
@instance.hi = "foo"
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
17
88
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::Setting::BooleanSetting do
|
4
|
+
|
5
|
+
describe "load" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@setting = Rapid::Setting::BooleanSetting.new("foo")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should know nil" do
|
12
|
+
@setting.load(nil).should == nil
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should know blank" do
|
16
|
+
@setting.load("").should == nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should know 0" do
|
20
|
+
@setting.load(0).should == false
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should know '0'" do
|
24
|
+
@setting.load("0").should == false
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should know false" do
|
28
|
+
@setting.load(false).should == false
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should know 'false'" do
|
32
|
+
@setting.load("false").should == false
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should know 1" do
|
36
|
+
@setting.load(1).should == true
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should know '1'" do
|
40
|
+
@setting.load("1").should == true
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should know true" do
|
44
|
+
@setting.load(true).should == true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should know 'true'" do
|
48
|
+
@setting.load("true").should == true
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should not know other values" do
|
52
|
+
lambda { @setting.load("foo") }.should raise_error(Rapid::InvalidSettingError)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "define_helpers" do
|
58
|
+
|
59
|
+
before do
|
60
|
+
Object.class_eval do
|
61
|
+
class MyClass
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
@setting = Rapid::Setting::BooleanSetting.new("foo")
|
67
|
+
@setting.define_helpers MyClass
|
68
|
+
@instance = MyClass.new
|
69
|
+
end
|
70
|
+
|
71
|
+
after do
|
72
|
+
Object.send(:remove_const, :MyClass) rescue nil
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should redefine get? to only return true when the value is true" do
|
76
|
+
@instance.should_receive(:[]).with(:foo).and_return(true)
|
77
|
+
@instance.foo?.should == true
|
78
|
+
|
79
|
+
@instance.should_receive(:[]).with(:foo).and_return('hi')
|
80
|
+
@instance.foo?.should == false
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should still define getter" do
|
84
|
+
@instance.should_receive(:[]).and_return(true)
|
85
|
+
@instance.foo.should == true
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should still define setter" do
|
89
|
+
@instance.should_receive(:[]=).with(:foo, true)
|
90
|
+
@instance.foo = true
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -79,6 +79,12 @@ describe Rapid::Setting::Definer do
|
|
79
79
|
@instance.foo.bar?.should == false
|
80
80
|
end
|
81
81
|
|
82
|
+
it "should raise an error when defining a setting under a scalar" do
|
83
|
+
@definer.string 'foo'
|
84
|
+
lambda { @definer.string 'foo.bar' }.should raise_error(Rapid::SettingError)
|
85
|
+
lambda { @definer.string 'foo.bar.baz.foo' }.should raise_error(Rapid::SettingError)
|
86
|
+
end
|
87
|
+
|
82
88
|
end
|
83
89
|
|
84
90
|
describe "string" do
|
@@ -162,6 +168,7 @@ describe Rapid::Setting::Definer do
|
|
162
168
|
@definer.namespace 'my_namespace', :default => false
|
163
169
|
|
164
170
|
@instance = MyClass.new
|
171
|
+
@instance.my_namespace.on?.should be_false
|
165
172
|
@instance.my_namespace?.should be_false
|
166
173
|
@instance.my_namespace = {}
|
167
174
|
@instance.my_namespace?.should be_true
|
@@ -222,9 +229,6 @@ describe Rapid::Setting::Definer do
|
|
222
229
|
|
223
230
|
@instance = MyClass.new
|
224
231
|
@instance.parent.child.should_not be_nil
|
225
|
-
|
226
|
-
@instance.parent.empty?.should == true
|
227
|
-
@instance.parent.child.empty?.should == true
|
228
232
|
end
|
229
233
|
|
230
234
|
it "should define a nested setting with default true" do
|
@@ -232,15 +236,9 @@ describe Rapid::Setting::Definer do
|
|
232
236
|
|
233
237
|
@instance = MyClass.new
|
234
238
|
|
235
|
-
@instance.parent.empty?.should == false
|
236
|
-
@instance.parent.child.empty?.should == false
|
237
|
-
|
238
239
|
@instance.parent.child?.should be_true
|
239
240
|
@instance.parent.child = nil
|
240
241
|
@instance.parent.child?.should be_false
|
241
|
-
|
242
|
-
@instance.parent.empty?.should == true
|
243
|
-
@instance.parent.child.empty?.should == true
|
244
242
|
end
|
245
243
|
|
246
244
|
it "should define a nested setting with default false" do
|
@@ -248,15 +246,11 @@ describe Rapid::Setting::Definer do
|
|
248
246
|
|
249
247
|
@instance = MyClass.new
|
250
248
|
|
251
|
-
@instance.parent.empty?.should == true
|
252
249
|
@instance.parent.child.empty?.should == true
|
253
250
|
|
254
251
|
@instance.parent.child?.should be_false
|
255
252
|
@instance.parent.child = {}
|
256
253
|
@instance.parent.child?.should be_true
|
257
|
-
|
258
|
-
@instance.parent.empty?.should == false
|
259
|
-
@instance.parent.child.empty?.should == false
|
260
254
|
end
|
261
255
|
|
262
256
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::Setting::IntegerSetting do
|
4
|
+
|
5
|
+
describe "load" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@setting = Rapid::Setting::IntegerSetting.new("foo")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should know nil" do
|
12
|
+
@setting.load(nil).should == nil
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should know blank" do
|
16
|
+
@setting.load("").should == nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should know false" do
|
20
|
+
@setting.load(false).should == nil
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should know integers" do
|
24
|
+
@setting.load(3).should == 3
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should convert strings" do
|
28
|
+
@setting.load("3").should == 3
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should not know unconvertable strings" do
|
32
|
+
lambda { @setting.load("asdf") }.should raise_error(Rapid::InvalidSettingError)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not know floats" do
|
36
|
+
lambda { @setting.load(3.5) }.should raise_error(Rapid::InvalidSettingError)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should not know arrays" do
|
40
|
+
lambda { @setting.load([]) }.should raise_error(Rapid::InvalidSettingError)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should not know hashes" do
|
44
|
+
lambda { @setting.load({}) }.should raise_error(Rapid::InvalidSettingError)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::Settings do
|
4
|
+
|
5
|
+
describe "extract_nested_namespace" do
|
6
|
+
|
7
|
+
it "should return the namespace and rest" do
|
8
|
+
Rapid::Settings.extract_nested_namespace("foo.bar").should == ["foo", "bar"]
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should return nil and original when not namespaced" do
|
12
|
+
Rapid::Settings.extract_nested_namespace("foo").should == [nil, "foo"]
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should handle nil" do
|
16
|
+
Rapid::Settings.extract_nested_namespace(nil).should == [nil, nil]
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should handle a symbol" do
|
20
|
+
Rapid::Settings.extract_nested_namespace(:foo).should == [nil, 'foo']
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -2,90 +2,124 @@ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
|
2
2
|
|
3
3
|
describe Rapid::Setting::Namespace::Base do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
it "should accept a nil name" do
|
6
|
+
@setting = Rapid::Setting::Namespace::Base.new(nil)
|
7
|
+
@setting.name.should == nil
|
8
|
+
@setting.full_name.should == nil
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should define settings" do
|
12
|
+
@setting = Rapid::Setting::Namespace::Base.new(nil)
|
11
13
|
|
12
|
-
@
|
14
|
+
@string = Rapid::Setting::StringSetting.new('foo', :namespace => @setting)
|
15
|
+
|
16
|
+
@setting['foo'].should == @string
|
13
17
|
end
|
14
18
|
|
15
|
-
|
16
|
-
|
19
|
+
it "should expose child namespaces" do
|
20
|
+
@setting = Rapid::Setting::Namespace::Base.new(nil)
|
21
|
+
@child = Rapid::Setting::Namespace::Base.new('foo', :namespace => @setting)
|
22
|
+
|
23
|
+
@setting.namespaces.should == [@child]
|
24
|
+
@setting.scalars.should == []
|
17
25
|
end
|
18
26
|
|
19
|
-
|
27
|
+
it "should expose child scalars" do
|
28
|
+
@setting = Rapid::Setting::Namespace::Base.new(nil)
|
20
29
|
|
21
|
-
|
22
|
-
@namespace = Rapid::Setting::Namespace::Base.new :app, :class => MySkeleton
|
23
|
-
|
24
|
-
@name = Rapid::Setting::StringSetting.new :name, :namespace => @namespace
|
25
|
-
@version = Rapid::Setting::StringSetting.new :version, :namespace => @namespace
|
26
|
-
|
27
|
-
@namespace.define_setting @name
|
28
|
-
@namespace.define_setting @version
|
29
|
-
end
|
30
|
+
@string = Rapid::Setting::StringSetting.new('foo', :namespace => @setting)
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
@setting.scalars.should == [@string]
|
33
|
+
@setting.namespaces.should == []
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "[]" do
|
34
37
|
|
35
|
-
it "should
|
36
|
-
|
38
|
+
it "should work with base children" do
|
39
|
+
@parent = Rapid::Setting::Namespace::Base.new(nil)
|
40
|
+
@child = Rapid::Setting::Namespace::Base.new('foo', :namespace => @parent)
|
41
|
+
|
42
|
+
@parent['foo'].should == @child
|
37
43
|
end
|
38
44
|
|
39
|
-
it "should
|
40
|
-
|
45
|
+
it "should work with grandchildren" do
|
46
|
+
@parent = Rapid::Setting::Namespace::Base.new(nil)
|
47
|
+
@child = Rapid::Setting::Namespace::Base.new('foo', :namespace => @parent)
|
48
|
+
@grandchild = Rapid::Setting::Namespace::Base.new('bar', :namespace => @child)
|
49
|
+
|
50
|
+
@parent['foo.bar'].should == @grandchild
|
41
51
|
end
|
42
52
|
|
43
|
-
it "should
|
44
|
-
@
|
45
|
-
|
46
|
-
@
|
53
|
+
it "should return nil when invalid key" do
|
54
|
+
@parent = Rapid::Setting::Namespace::Base.new(nil)
|
55
|
+
|
56
|
+
@parent['foo'].should == nil
|
57
|
+
@parent['foo.bar'].should == nil
|
47
58
|
end
|
48
59
|
|
49
60
|
end
|
50
61
|
|
51
|
-
describe "
|
62
|
+
describe "define_helpers" do
|
52
63
|
|
53
64
|
before do
|
54
|
-
|
55
|
-
|
65
|
+
Object.class_eval do
|
66
|
+
class MyClass
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
@setting = Rapid::Setting::Namespace::Base.new("foo")
|
72
|
+
@setting.define_helpers MyClass
|
73
|
+
@instance = MyClass.new
|
74
|
+
end
|
75
|
+
|
76
|
+
after do
|
77
|
+
Object.send(:remove_const, :MyClass) rescue nil
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should redefine get? to only return true when the namespace isn't empty" do
|
81
|
+
@instance.should_receive(:[]).with(:foo).and_return(nil)
|
82
|
+
@instance.foo?.should == false
|
56
83
|
|
57
|
-
@
|
58
|
-
@
|
84
|
+
@instance.should_receive(:[]).with(:foo).and_return(mock(:on? => false))
|
85
|
+
@instance.foo?.should == false
|
59
86
|
|
60
|
-
@
|
61
|
-
@
|
62
|
-
@author.define_setting @version
|
87
|
+
@instance.should_receive(:[]).with(:foo).and_return(mock(:on? => true))
|
88
|
+
@instance.foo?.should == true
|
63
89
|
end
|
64
90
|
|
65
|
-
it "should
|
66
|
-
@
|
91
|
+
it "should still define getter" do
|
92
|
+
@instance.should_receive(:[]).and_return(true)
|
93
|
+
@instance.foo.should == true
|
67
94
|
end
|
68
95
|
|
69
|
-
it "should
|
70
|
-
|
71
|
-
|
96
|
+
it "should still define setter" do
|
97
|
+
@instance.should_receive(:[]=).with(:foo, true)
|
98
|
+
@instance.foo = true
|
72
99
|
end
|
73
100
|
|
74
|
-
|
75
|
-
|
76
|
-
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "instance_class" do
|
104
|
+
|
105
|
+
before do
|
106
|
+
Object.class_eval do
|
107
|
+
class MyClass
|
108
|
+
|
109
|
+
end
|
110
|
+
end
|
77
111
|
end
|
78
112
|
|
79
|
-
|
80
|
-
|
81
|
-
@instance.author.name.should == "Dan"
|
82
|
-
@instance.author.version.should == "1.0"
|
113
|
+
after do
|
114
|
+
Object.send(:remove_const, :MyClass) rescue nil
|
83
115
|
end
|
84
116
|
|
85
|
-
it "should
|
86
|
-
@
|
87
|
-
@
|
88
|
-
|
117
|
+
it "should define the instance class when given :class" do
|
118
|
+
@setting = Rapid::Setting::Namespace::Base.new("foo", :class => MyClass)
|
119
|
+
@setting.instance_class.name.should == "MyClass::Settings::Foo"
|
120
|
+
|
121
|
+
@setting.instance_class.setting_name.should == :foo
|
122
|
+
@setting.instance_class.full_setting_name.should == "foo"
|
89
123
|
end
|
90
124
|
|
91
125
|
end
|