kojac 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +7 -0
  3. data/Gemfile +17 -0
  4. data/Gemfile.lock +158 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +69 -0
  7. data/Rakefile +27 -0
  8. data/app/assets/javascripts/can_extensions.js +45 -0
  9. data/app/assets/javascripts/kojac.js +1230 -0
  10. data/app/assets/javascripts/kojac_canjs.js +191 -0
  11. data/app/assets/javascripts/kojac_ember.js +463 -0
  12. data/app/controllers/kojac_controller.rb +70 -0
  13. data/app/serializers/default_kojac_serializer.rb +10 -0
  14. data/diagram.odg +0 -0
  15. data/kojac.gemspec +36 -0
  16. data/lib/kojac/app_serialize.rb +29 -0
  17. data/lib/kojac/kojac_rails.rb +432 -0
  18. data/lib/kojac/ring_strong_parameters.rb +195 -0
  19. data/lib/kojac/version.rb +3 -0
  20. data/lib/kojac.rb +8 -0
  21. data/lib/tasks/kojac_tasks.rake +4 -0
  22. data/notes.txt +48 -0
  23. data/spec/.DS_Store +0 -0
  24. data/spec/can_cache_spec.js +87 -0
  25. data/spec/can_factory_spec.js +144 -0
  26. data/spec/can_model_spec.js +127 -0
  27. data/spec/demo/README.rdoc +261 -0
  28. data/spec/demo/Rakefile +7 -0
  29. data/spec/demo/app/assets/javascripts/application.js +15 -0
  30. data/spec/demo/app/assets/stylesheets/application.css +13 -0
  31. data/spec/demo/app/controllers/application_controller.rb +3 -0
  32. data/spec/demo/app/helpers/application_helper.rb +2 -0
  33. data/spec/demo/app/mailers/.gitkeep +0 -0
  34. data/spec/demo/app/models/.gitkeep +0 -0
  35. data/spec/demo/app/views/layouts/application.html.erb +14 -0
  36. data/spec/demo/config/application.rb +65 -0
  37. data/spec/demo/config/boot.rb +10 -0
  38. data/spec/demo/config/database.yml +25 -0
  39. data/spec/demo/config/environment.rb +5 -0
  40. data/spec/demo/config/environments/development.rb +37 -0
  41. data/spec/demo/config/environments/production.rb +67 -0
  42. data/spec/demo/config/environments/test.rb +37 -0
  43. data/spec/demo/config/initializers/backtrace_silencers.rb +7 -0
  44. data/spec/demo/config/initializers/inflections.rb +15 -0
  45. data/spec/demo/config/initializers/mime_types.rb +5 -0
  46. data/spec/demo/config/initializers/secret_token.rb +7 -0
  47. data/spec/demo/config/initializers/session_store.rb +8 -0
  48. data/spec/demo/config/initializers/wrap_parameters.rb +14 -0
  49. data/spec/demo/config/locales/en.yml +5 -0
  50. data/spec/demo/config/routes.rb +58 -0
  51. data/spec/demo/config.ru +4 -0
  52. data/spec/demo/lib/assets/.gitkeep +0 -0
  53. data/spec/demo/log/.gitkeep +0 -0
  54. data/spec/demo/public/404.html +26 -0
  55. data/spec/demo/public/422.html +26 -0
  56. data/spec/demo/public/500.html +25 -0
  57. data/spec/demo/public/favicon.ico +0 -0
  58. data/spec/demo/script/rails +6 -0
  59. data/spec/ember_factory_spec.js +157 -0
  60. data/spec/ember_model_spec.js +179 -0
  61. data/spec/external/.DS_Store +0 -0
  62. data/spec/external/ember/.DS_Store +0 -0
  63. data/spec/external/ember/ember-1.0.0-rc.6.js +30970 -0
  64. data/spec/external/ember/handlebars-1.0.0-rc.4.js +2239 -0
  65. data/spec/external/jasmine/MIT.LICENSE +20 -0
  66. data/spec/external/jasmine/jasmine-html.js +616 -0
  67. data/spec/external/jasmine/jasmine.css +81 -0
  68. data/spec/external/jasmine/jasmine.js +2529 -0
  69. data/spec/external/jasmine.async.js +51 -0
  70. data/spec/external/jquery/jquery-1.7.2.js +9404 -0
  71. data/spec/external/jquery/jquery-1.7.2.min.js +4 -0
  72. data/spec/external/jquery/jquery-1.9.1.js +9597 -0
  73. data/spec/external/json2.js +480 -0
  74. data/spec/external/steal/steal-121115.js +2747 -0
  75. data/spec/external/steal/steal-3.2.3.js +2098 -0
  76. data/spec/external/steal/steal-3.2.3.min.js +27 -0
  77. data/spec/external/steal/steal.js +2466 -0
  78. data/spec/external/steal/steal.min.js +32 -0
  79. data/spec/external/steal/stealconfig.js +19 -0
  80. data/spec/external/underscore.js +1223 -0
  81. data/spec/external/underscore_plus.js +261 -0
  82. data/spec/external.zip +0 -0
  83. data/spec/handler_stack_spec.js +143 -0
  84. data/spec/helpers/SpecHelper.js +10 -0
  85. data/spec/kojac_caching_spec.js +105 -0
  86. data/spec/kojac_mock_spec.js +230 -0
  87. data/spec/kojac_model_spec.js +126 -0
  88. data/spec/kojac_object_spec.js +171 -0
  89. data/spec/kojac_operations_spec.js +41 -0
  90. data/spec/mockjson/order_item.js +37 -0
  91. data/spec/mockjson/order_item__49.js +15 -0
  92. data/spec/mockjson/order_item__50.js +15 -0
  93. data/spec/mockjson/order_item__51.js +15 -0
  94. data/spec/mockjson/product.js +82 -0
  95. data/spec/mockjson/product__3.js +22 -0
  96. data/spec/model_ring_spec.rb +52 -0
  97. data/spec/operation_include_spec.js +77 -0
  98. data/spec/run.html +81 -0
  99. data/spec/spec.js +2 -0
  100. data/spec/support/jasmine.yml +86 -0
  101. metadata +380 -0
@@ -0,0 +1,27 @@
1
+ (function(){function c(){var a=v(arguments);p.push.apply(p,a);c.after(a);return c}function H(a,b,d,c){k[b.shift()].require(a,function(){b.length?H(a,b,d,c):d.apply(this,arguments)},c)}function n(a,b,d){return d?function(){return a.apply(this,b.apply(this,arguments))}:function(){b.apply(this,arguments);return a.apply(this,arguments)}}function o(a,b,d){return d?function(){return b.apply(this,[a.apply(this,arguments)].concat(v(arguments)))}:function(){var d=a.apply(this,arguments);b.apply(this,arguments);
2
+ return d}}function w(a,b){var d=a[b];a[b].callbacks||(a[b]=function(){var b=arguments.callee,c;c=d.apply(a,arguments);var e=b.callbacks,g=e.length;b.called=!0;for(b=0;b<g;b++)e[b].called();return c},a[b].callbacks=[]);return a[b]}function I(a,b){this.obj=a;this.meth=b;w(a,b);this.calls=0}function r(){var a=v(arguments),b=a[a.length-1];"function"===typeof b&&(a[a.length-1]={fn:b},a.push("fn"));for(var b=a.pop(),d=a.pop(),b=new I(d,b),d=0;d<a.length;d+=2)b.add(a[d],a[d+1]);b.go()}var g=function(){return this}.call(null),
3
+ f=g.document,D=function(){var a=f.createElement("script");a.type="text/javascript";return a},q=function(){var a=f.documentElement,b=f.getElementsByTagName("head")[0];b||(b=f.createElement("head"),a.insertBefore(b,a.firstChild));q=function(){return b};return b},h=function(a,b){for(var d in b)a[d]=b[d];return a},l=function(a,b){for(var d=0,c=a.length;d<c;d++)b.call(a[d],d,a[d]);return a},v=function(a){var b=[];l(a,function(a,c){b[a]=c});return b},J=f&&function(){var a=D();a.setAttribute("onerror","return;");
4
+ return"function"===typeof a.onerror?!0:"onerror"in a}(),K=!1,L=f&&D().attachEvent,s=function(){},x=g.steal,E="object"==typeof x?x:{};c.File=function(a){if(this.constructor!=c.File)return new c.File(a);this.path="string"==typeof a?a:a.path};var e=c.File,M;e.cur=function(a){if(void 0!==a)M=e(a);else return M||e("")};h(e.prototype,{clean:function(){return this.path.match(/([^\?#]*)/)[1]},ext:function(){var a=this.clean().match(/\.([\w\d]+)$/);return a?a[1]:""},dir:function(){var a=this.clean(),b=a.lastIndexOf("/"),
5
+ b=-1!=b?a.substring(0,b):"";return/^(https?:\/|file:\/)$/.test(b)?a:b},filename:function(){var a=this.clean(),b=a.lastIndexOf("/"),b=-1!=b?a.substring(b+1,a.length):a;return/^(https?:\/|file:\/)$/.test(b)?a:b},domain:function(){var a=this.path.match(/^(?:https?:\/\/)([^\/]*)/);return a?a[1]:null},join:function(a){return e(a).joinFrom(this.path)},joinFrom:function(a,b){var d=e(a);if(this.protocol()){var i=this.domain(),d=d.domain();return i&&i==d?this.toReferenceFromSameDomain(a):this.path}if(a===
6
+ c.pageUrl().dir()&&!b)return this.path;if(this.isLocalAbsolute())return(d.domain()?d.protocol()+"//"+d.domain():"")+this.path;if(""===a)return this.path.replace(/\/$/,"");var i=a.split("/"),d=this.path.split("/"),j=d[0];for(a.match(/\/$/)&&i.pop();".."==j&&0<d.length&&i.pop();)d.shift(),j=d[0];return i.concat(d).join("/")},relative:function(){return null===this.path.match(/^(https?:|file:|\/)/)},toReferenceFromSameDomain:function(a){for(var b=this.path.split("/"),a=a.split("/"),d="";0<b.length&&0<
7
+ a.length&&b[0]==a[0];)b.shift(),a.shift();l(a,function(){d+="../"});return d+b.join("/")},isCrossDomain:function(){return this.isLocalAbsolute()?!1:this.domain()!=e(g.location.href).domain()},isLocalAbsolute:function(){return 0===this.path.indexOf("/")},protocol:function(){var a=this.path.match(/^(https?:|file:)/);return a&&a[0]},normalize:function(){var a=e.cur().dir(),b=this.path;if(/^\/\//.test(this.path))b=this.path.substr(2);else if(/^\.\//.test(this.path))this.path=this.path.substr(2),b=this.joinFrom(a),
8
+ this.path="./"+this.path;else if(!/^[^\.|\/]/.test(this.path)&&(this.relative()||e.cur().isCrossDomain()&&!this.protocol()))b=this.joinFrom(a);return b}});var p=[],U=0,t={};c.p={make:function(a){var b=new c.p.init(a),d=b.options.rootSrc;b.unique&&d&&(!t[d]&&!t[d+".js"]?t[d]=b:(b=t[d],h(b.options,"string"===typeof a?{}:a)));return b},init:function(a){this.dependencies=[];this.id=++U;if(a)if("function"==typeof a){var b=e.cur().path;this.options={fn:function(){e.cur(b);a(c.send||g.jQuery||c)},rootSrc:b,
9
+ orig:a,type:"fn"};this.waits=!0;this.unique=!1}else this.orig=a,this.options=c.makeOptions(h({},"string"==typeof a?{src:a}:a)),this.waits=this.options.waits||!1,this.unique=!0;else this.options={},this.waits=!1,this.pack="production.js"},complete:function(){this.completed=!0},loaded:function(a){var b,d,a=a&&a.src||this.options.src;e.cur(this.options.rootSrc);this.isLoaded=!0;K&&a&&(b=m[a]);b||(b=p.slice(0),p=[]);if(b.length){var i=this,j,g="production"==c.options.env,f=[],h=function(a,b,d,i){var e=
10
+ [d,i];l(a,function(a,d){e.unshift(d,b)});r.apply(c,e)},k=function(a,b,d,c){l(d,function(d,i){r(a,b,i,c)})};l(b.reverse(),function(a,b){if(!g||!b.ignore){d=c.p.make(b);i.dependencies.unshift(d);if(d.waits===false)f.push(d);else{if(j){h(f.concat(d),"complete",j,"load");k(d,"complete",f.length?f:[j],"load")}else{h(f.concat(d),"complete",i,"complete");f.length&&k(d,"complete",f,"load")}j=d;f=[]}}});f.length?(j?h(f,"complete",j,"load"):h(f,"complete",i,"complete"),l(f.reverse(),function(){this.load()})):
11
+ j?j.load():i.complete()}else this.complete()},load:function(){if(!this.loading&&!this.isLoaded){this.loading=!0;var a=this;c.require(this.options,function(b){a.loaded(b)},function(){g.clearTimeout&&g.clearTimeout(a.completeTimeout);throw"steal.js : "+a.options.src+" not completed";})}}};c.p.init.prototype=c.p;var N;h(c,{root:e(""),rootUrl:function(a){if(void 0!==a){c.root=e(a);var b=c.pageUrl(),a=b.join(a);e.cur(b.toReferenceFromSameDomain(a));return c}return c.root.path},extend:h,pageUrl:function(a){return a?
12
+ (N=e(e(a).clean()),c):N||e("")},cur:function(a){if(void 0===a)return e.cur();e.cur(a);return c},isRhino:g.load&&g.readUrl&&g.readFile,options:{env:"development",loadProduction:!0},add:function(a){t[a.rootSrc]=a},makeOptions:function(a){e(a.src).ext()||(a.src=0==a.src.indexOf(".")||0==a.src.indexOf("/")?a.src+".js":a.src+"/"+e(a.src).filename()+".js");var b=c.File(a.src).normalize(),d=c.File(a.src).protocol();h(a,{originalSrc:a.src,rootSrc:b,src:c.root.join(b),protocol:d||(f?location.protocol:"file:")});
13
+ a.originalSrc=a.src;return a},then:function(){var a="function"==typeof arguments[0]?arguments:[function(){}].concat(v(arguments));return c.apply(g,a)},bind:function(a,b){u[a]||(u[a]=[]);var d=c.events[a];d&&d.add&&(b=d.add(b));b&&u[a].push(b);return c},one:function(a,b){c.bind(a,function(){b.apply(this,arguments);c.unbind(a,arguments.callee)});return c},events:{},unbind:function(a,b){for(var d=u[a]||[],c=0;c<d.length;)b===d[c]?d.splice(c,1):c++},trigger:function(a,b){for(var d=u[a]||[],c=[],e=0,f=
14
+ d.length;e<f;e++)c[e]=d[e];l(c,function(a,d){d(b)})},loading:function(){useInteractive=!1;l(arguments,function(a,b){c.p.make(b).loading=!0})},preloaded:function(){},loaded:function(a){a=c.p.make(a);a.loading=!0;w(a,"complete");c.preloaded(a);a.loaded();return c}});var u={},s=n(s,function(){c.pageUrl(g.location?g.location.href:"")}),k=c.types={};c.type=function(a,b){var d=a.split(" ");if(!b)return k[d.shift()].require;k[d.shift()]={require:b,convert:d}};c.p.load=n(c.p.load,function(){var a=this.options;
15
+ if(!a.type){var b=e(a.src).ext();!b&&!k[b]&&(b="js");a.type=b}if(!k[a.type])throw"steal.js - type "+a.type+" has not been loaded.";b=k[a.type].convert;a.buildType=b.length?b[b.length-1]:a.type});c.require=function(a,b,d){var c=k[a.type];c.convert.length?(c=c.convert.slice(0),c.unshift("text",a.type)):c=[a.type];H(a,c,b,d)};var O=function(a){a.onreadystatechange=a.onload=a.onerror=null;q().removeChild(a)},y,V=/loaded|complete/;c.type("js",function(a,b,d){var c=D();if(a.text)c.text=a.text;else{var e=
16
+ function(){if(!c.readyState||V.test(c.readyState))O(c),b(c)};L?c.attachEvent("onreadystatechange",e):c.onload=e;J&&d&&"file:"!==a.protocol&&(L?c.attachEvent("onerror",d):c.onerror=d);c.src=a.src;c.onSuccess=b}y=c;q().insertBefore(c,q().firstChild);a.text&&(b(),O(c))});c.type("fn",function(a,b){b(a.fn())});c.type("text",function(a,b,d){c.request(a,function(d){a.text=d;b(d)},d)});var F=0,W=f&&f.createStyleSheet,G;c.type("css",function(a,b){if(a.text){var d=f.createElement("style");d.type="text/css";
17
+ if(d.styleSheet)d.styleSheet.cssText=a.text;else{var c=f.createTextNode(a.text);0<d.childNodes.length?d.firstChild.nodeValue!==c.nodeValue&&d.replaceChild(c,d.firstChild):d.appendChild(c)}q().appendChild(d)}else if(W){if(30==F||!G)G=document.createStyleSheet(),F=0;G.addImport(a.src);F++}else a=a||{},d=f.createElement("link"),d.rel=a.rel||"stylesheet",d.href=a.src,d.type="text/css",q().appendChild(d);b()});if(E.types)for(var P in E.types)c.type(P,E.types[P]);var X=function(){return g.ActiveXObject?
18
+ new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest};c.request=function(a,b,d){var c=new X,e=a.contentType||"application/x-www-form-urlencoded; charset=utf-8",f=function(){c=g=f=null},g=function(){4===c.readyState&&(500===c.status||404===c.status||2===c.status||0>c.status||0===c.status&&""===c.responseText?d&&d(c.status):b(c.responseText),f())};c.open("GET",a.src,!1===a.async?!1:!0);c.setRequestHeader("Content-type",e);c.overrideMimeType&&c.overrideMimeType(e);c.onreadystatechange=function(){g()};
19
+ try{c.send(null)}catch(h){f&&(console.error(h),d&&d(),f())}};var Q=function(a){var b,d;for(b in c.mappings)if(d=c.mappings[b],d.test.test(a))return a.replace(b,d.path);return a};e.prototype.mapJoin=function(a){a=Q(a);return e(a).joinFrom(this.path)};c.makeOptions=o(c.makeOptions,function(a){a.src=c.root.join(a.rootSrc=Q(a.rootSrc))});c.mappings={};c.map=function(a,b){if("string"==typeof a)c.mappings[a]={test:RegExp("^("+a+")([/.]|$)"),path:b};else for(var d in a)c.map(d,a[d]);return this};var z;h(c,
20
+ {after:function(){if(!z){var a=z=new c.p.init,b=function(){c.trigger("start",a);r(a,"complete",function(){c.trigger("end",a)});a.loaded()};g.setTimeout?setTimeout(b,0):b()}},_before:n,_after:o});c.p.complete=n(c.p.complete,function(){this===z&&(z=null)});(function(){var a=!1,b,d=!1;c.p.loaded=n(c.p.loaded,function(){var c="undefined"!==typeof jQuery?jQuery:null;c&&"readyWait"in c&&!a&&(b=c,c.readyWait+=1,a=!0)});c.bind("end",function(){a&&!d&&(b.ready(!0),d=!0)})})();c.p.load=o(c.p.load,function(){if(g.document&&
21
+ !this.completed&&!this.completeTimeout&&!c.isRhino&&("file:"==this.options.protocol||!J)){var a=this;this.completeTimeout=setTimeout(function(){throw"steal.js : "+a.options.src+" not completed";},5E3)}});c.p.complete=o(c.p.complete,function(){this.completeTimeout&&clearTimeout(this.completeTimeout)});h(I.prototype,{called:function(){this.calls--;this.go()},add:function(a,b){var c=w(a,b);c.called||(c.callbacks.push(this),this.calls++)},go:function(){if(0===this.calls)this.obj[this.meth]()}});var A=
22
+ {load:function(){},end:function(){}},B=!1;(function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent?a.attachEvent("on"+b,c):c()})(g,"load",function(){A.load()});c.one("end",function(a){A.end();B=a;c.trigger("done",B)});r(A,"load",A,"end",function(){c.trigger("ready");c.isReady=!0});c.events.done={add:function(a){return B?(a(B),!1):a}};c.p.make=o(c.p.make,function(a){a.options.has&&(a.isLoaded?a.loadHas():c.loading.apply(c,a.options.has));return a},!0);c.p.loaded=n(c.p.loaded,function(){this.options.has&&
23
+ this.loadHas()});c.p.loadHas=function(){var a,b,d=e.cur();for(b=0;b<this.options.has.length;b++)e.cur(d),a=c.p.make(this.options.has[b]),w(a,"complete"),a.loaded()};var C,m={},R=function(){var a,b,c=f.getElementsByTagName("script");for(a=c.length-1;-1<a&&(b=c[a]);a--)if("interactive"===b.readyState)return b},S=function(){var a;return C&&"interactive"===C.readyState?C:(a=R())?C=a:y&&"interactive"==y.readyState?y:null};if(K=f&&!!R())c.after=o(c.after,function(){var a=S();a&&a.src&&!/steal\.(production|production\.[a-zA-Z0-9\-\.\_]*)*js/.test(a.src)&&
24
+ (a=a.src,m[a]||(m[a]=[]),a&&(m[a].push.apply(m[a],p),p=[]))}),c.preloaded=n(c.preloaded,function(a){var a=a.options.src,b=S().src;m[a]=m[b];m[b]=null});var T=/steal\.(production\.)?js.*/;c.getScriptOptions=function(a){var b;if(!(b=a))a:{if(f){b=f.getElementsByTagName("script");for(var a=0,d=b.length;a<d;a++){var e=b[a].src;if(e&&T.test(e)){b=b[a];break a}}}b=void 0}a=b;b={};if(a&&(a=a.src,d=a.replace(T,""),b.rootUrl=/steal\/$/.test(d)?d.substr(0,d.length-6):d+"../",/steal\.production\.js/.test(a)&&
25
+ (b.env="production"),-1!==a.indexOf("?")))if(a=a.split("?")[1],a=a.split(","),a[0]&&(b.startFile=a[0]),a[1]&&"production"!=c.options.env)b.env=a[1];return b};s=o(s,function(){var a=c.options,b=[];h(a,c.getScriptOptions());"object"==typeof x&&h(a,x);var d=g.location&&decodeURIComponent(g.location.search);d&&d.replace(/steal\[([^\]]+)\]=([^&]+)/g,function(b,c,d){b=d.split(",");1<b.length&&(d=b);a[c]=d});c.rootUrl(a.rootUrl);a.startFile&&"-1"==a.startFile.indexOf(".")&&(a.startFile=a.startFile+"/"+a.startFile.match(/[^\/]+$/)[0]+
26
+ ".js");a.logLevel||(a.logLevel=0);!a.production&&a.startFile&&(a.production=e(a.startFile).dir()+"/production.js");a.production&&(a.production+=-1==a.production.indexOf(".js")?".js":"");l(a.loaded||[],function(a,b){c.loaded(b)});"string"===typeof a.startFiles?b.push(a.startFiles):a.startFiles&&a.startFiles.length&&(b=a.startFiles);d=[];b.length&&(c.options.startFiles=b,d.push.apply(d,b));(a.instrument||!a.browser&&g.top&&g.top.opener&&g.top.opener.steal&&g.top.opener.steal.options.instrument)&&d.push(function(){},
27
+ {src:"steal/instrument",waits:!0});"production"==a.env&&a.loadProduction?a.production&&c({src:a.production,force:!0}):(!1!==a.loadDev&&d.unshift({src:"steal/dev/dev.js",ignore:!0}),a.startFile&&d.push(a.startFile));d.length&&c.apply(null,d)});c.when=r;g.steal=c;s()})();