ninjs-framework 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/.DS_Store +0 -0
  2. data/.bundle/config +2 -0
  3. data/.travis.yml +2 -0
  4. data/Gemfile +10 -0
  5. data/Gemfile.lock +47 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +4 -0
  8. data/Rakefile +76 -0
  9. data/VERSION +1 -0
  10. data/lib/.DS_Store +0 -0
  11. data/lib/ninjs-framework.rb +164 -0
  12. data/lib/ninjs-framework/assets/jasmine/jasmine-html.js +190 -0
  13. data/lib/ninjs-framework/assets/jasmine/jasmine.css +166 -0
  14. data/lib/ninjs-framework/assets/jasmine/jasmine.js +2476 -0
  15. data/lib/ninjs-framework/assets/jasmine/jasmine_favicon.png +0 -0
  16. data/lib/ninjs-framework/core/.core.pdoc.yaml +0 -0
  17. data/lib/ninjs-framework/core/.existence.pdoc.yaml +12 -0
  18. data/lib/ninjs-framework/core/.extend.pdoc.yaml +0 -0
  19. data/lib/ninjs-framework/core/.nin.pdoc.yaml +0 -0
  20. data/lib/ninjs-framework/core/application.js +17 -0
  21. data/lib/ninjs-framework/core/dom.js +164 -0
  22. data/lib/ninjs-framework/core/existence.js +60 -0
  23. data/lib/ninjs-framework/core/extend.js +14 -0
  24. data/lib/ninjs-framework/core/module.js +66 -0
  25. data/lib/ninjs-framework/core/nin.js +5 -0
  26. data/lib/ninjs-framework/extensions/jquery.elements.js +60 -0
  27. data/lib/ninjs-framework/templates/application.js.erb +3 -0
  28. data/lib/ninjs-framework/templates/autoload.js.erb +3 -0
  29. data/lib/ninjs-framework/templates/core.js.erb +3 -0
  30. data/lib/ninjs-framework/templates/dependency.js.erb +3 -0
  31. data/lib/ninjs-framework/templates/jasmine.yml.erb +75 -0
  32. data/lib/ninjs-framework/templates/test-index.html.erb +51 -0
  33. data/lib/ninjs-framework/utilities/all.js +5 -0
  34. data/lib/ninjs-framework/utilities/array.js +29 -0
  35. data/lib/ninjs-framework/utilities/cookie.js +59 -0
  36. data/lib/ninjs-framework/utilities/css.js +51 -0
  37. data/lib/ninjs-framework/utilities/number.js +11 -0
  38. data/lib/ninjs-framework/utilities/string.js +61 -0
  39. data/spec/fixtures/myapp.js +530 -0
  40. data/spec/fixtures/nin.js +297 -0
  41. data/spec/fixtures/ninjs.conf +9 -0
  42. data/spec/fixtures/test.elements.js +3 -0
  43. data/spec/fixtures/test.js +14 -0
  44. data/spec/fixtures/test.model.js +3 -0
  45. data/spec/fixtures/test.module.js +10 -0
  46. data/spec/fixtures/utilities.js +211 -0
  47. data/spec/javascripts/application_spec.js +22 -0
  48. data/spec/javascripts/array_utility_spec.js +49 -0
  49. data/spec/javascripts/existence_spec.js +71 -0
  50. data/spec/javascripts/extension_spec.js +22 -0
  51. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  52. data/spec/javascripts/module_spec.js +30 -0
  53. data/spec/javascripts/string_utility_spec.js +85 -0
  54. data/spec/javascripts/support/jasmine.yml +75 -0
  55. data/spec/javascripts/support/jasmine_config.rb +23 -0
  56. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  57. data/spec/ninjs_framework_spec.rb +121 -0
  58. data/spec/spec_helper.rb +41 -0
  59. data/spec/tmp/Rakefile +76 -0
  60. data/spec/tmp/application/myapp.js +530 -0
  61. data/spec/tmp/application/test.js +14 -0
  62. data/spec/tmp/elements/test.elements.js +3 -0
  63. data/spec/tmp/lib/nin.js +297 -0
  64. data/spec/tmp/lib/utilities.js +211 -0
  65. data/spec/tmp/models/test.model.js +3 -0
  66. data/spec/tmp/modules/test.module.js +10 -0
  67. data/spec/tmp/ninjs.conf +9 -0
  68. data/spec/tmp/spec/index.html +51 -0
  69. data/spec/tmp/spec/javascripts/application_spec.js +22 -0
  70. data/spec/tmp/spec/javascripts/array_utility_spec.js +49 -0
  71. data/spec/tmp/spec/javascripts/existence_spec.js +71 -0
  72. data/spec/tmp/spec/javascripts/extension_spec.js +22 -0
  73. data/spec/tmp/spec/javascripts/module_spec.js +30 -0
  74. data/spec/tmp/spec/javascripts/string_utility_spec.js +85 -0
  75. data/spec/tmp/spec/javascripts/support/jasmine-html.js +190 -0
  76. data/spec/tmp/spec/javascripts/support/jasmine.css +166 -0
  77. data/spec/tmp/spec/javascripts/support/jasmine.js +2476 -0
  78. data/spec/tmp/spec/javascripts/support/jasmine.yml.erb +75 -0
  79. data/spec/tmp/spec/javascripts/support/jasmine_config.rb +23 -0
  80. data/spec/tmp/spec/javascripts/support/jasmine_favicon.png +0 -0
  81. data/spec/tmp/spec/javascripts/support/jasmine_runner.rb +32 -0
  82. metadata +285 -0
File without changes
@@ -0,0 +1,12 @@
1
+ ---
2
+ id: "is_defined"
3
+ type: class method
4
+ line_number: 5
5
+ description: |
6
+
7
+
8
+ signatures:
9
+ -
10
+ signature: ".is_defined(suspect)"
11
+ return_value: "Any"
12
+ file: /Volumes/Storage/Development/ninjs/repository/ninjs/core/existence.js
File without changes
File without changes
@@ -0,0 +1,17 @@
1
+ NinjsApplication = function() {};
2
+
3
+ NinjsApplication.prototype.add_module = function(name) {
4
+ if (is_undefined(name)) {
5
+ throw new SyntaxError("NinjsApplication.add_module(name): name is undefined");
6
+ }
7
+
8
+ if (is_defined(this[name])) {
9
+ throw new SyntaxError("NinjsApplication.add_module(name): '" + name + "' already declared");
10
+ }
11
+
12
+ if (this.name === name) {
13
+ throw new SyntaxError("NinjsApplication.add_module(name): a module cannot have the same name as the application");
14
+ }
15
+
16
+ return this[name] = new NinjsModule(name);
17
+ };
@@ -0,0 +1,164 @@
1
+ var DomReady = window.DomReady = {},
2
+ userAgent = navigator.userAgent.toLowerCase(),
3
+ browser = {
4
+ version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
5
+ safari: /webkit/.test(userAgent),
6
+ opera: /opera/.test(userAgent),
7
+ msie: (/msie/.test(userAgent)) && (!/opera/.test( userAgent )),
8
+ mozilla: (/mozilla/.test(userAgent)) && (!/(compatible|webkit)/.test(userAgent))
9
+ },
10
+ readyBound = false,
11
+ isReady = false,
12
+ readyList = [];
13
+
14
+
15
+ function domReady() {
16
+ // Make sure that the DOM is not already loaded
17
+ if(!isReady) {
18
+ // Remember that the DOM is ready
19
+ isReady = true;
20
+
21
+ if(readyList) {
22
+ var length = readyList.length;
23
+ for(var fn = 0; fn < length; fn++) {
24
+ readyList[fn].call(window, []);
25
+ }
26
+
27
+ readyList = [];
28
+ }
29
+ }
30
+ };
31
+
32
+ // From Simon Willison. A safe way to fire onload w/o screwing up everyone else.
33
+ function addLoadEvent(func) {
34
+ var oldonload = window.onload;
35
+ if (typeof window.onload != 'function') {
36
+ window.onload = func;
37
+ }
38
+ else {
39
+ window.onload = function() {
40
+ if (oldonload) {
41
+ oldonload();
42
+ }
43
+ func();
44
+ }
45
+ }
46
+ };
47
+
48
+ // does the heavy work of working through the browsers idiosyncracies (let's call them that) to hook onload.
49
+ function bindReady() {
50
+ if(readyBound) {
51
+ return;
52
+ }
53
+
54
+ readyBound = true;
55
+
56
+ // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
57
+ if (document.addEventListener && !browser.opera) {
58
+ // Use the handy event callback
59
+ document.addEventListener("DOMContentLoaded", domReady, false);
60
+ }
61
+
62
+ // If IE is used and is not in a frame
63
+ // Continually check to see if the document is ready
64
+ if (browser.msie && window == top) (function() {
65
+ if (isReady) return;
66
+ try {
67
+ // If IE is used, use the trick by Diego Perini
68
+ // http://javascript.nwbox.com/IEContentLoaded/
69
+ document.documentElement.doScroll("left");
70
+ }
71
+ catch(error) {
72
+ setTimeout(arguments.callee, 0);
73
+ return;
74
+ }
75
+ // and execute any waiting functions
76
+ domReady();
77
+ })();
78
+
79
+ if(browser.opera) {
80
+ document.addEventListener( "DOMContentLoaded", function () {
81
+ if (isReady) return;
82
+ for (var i = 0; i < document.styleSheets.length; i++)
83
+ if (document.styleSheets[i].disabled) {
84
+ setTimeout( arguments.callee, 0 );
85
+ return;
86
+ }
87
+ // and execute any waiting functions
88
+ domReady();
89
+ }, false);
90
+ }
91
+
92
+ if(browser.safari) {
93
+ var numStyles;
94
+ (function(){
95
+ if (isReady) return;
96
+
97
+ if (document.readyState != "loaded" && document.readyState != "complete") {
98
+ setTimeout( arguments.callee, 0 );
99
+ return;
100
+ }
101
+
102
+ if (numStyles === undefined) {
103
+ var links = document.getElementsByTagName("link");
104
+ for (var i=0; i < links.length; i++) {
105
+ if(links[i].getAttribute('rel') == 'stylesheet') {
106
+ numStyles++;
107
+ }
108
+ }
109
+
110
+ var styles = document.getElementsByTagName("style");
111
+ numStyles += styles.length;
112
+ }
113
+
114
+ if (document.styleSheets.length != numStyles) {
115
+ setTimeout( arguments.callee, 0 );
116
+ return;
117
+ }
118
+
119
+ // and execute any waiting functions
120
+ domReady();
121
+ })();
122
+ }
123
+
124
+ // A fallback to window.onload, that will always work
125
+ addLoadEvent(domReady);
126
+ };
127
+
128
+ // This is the public function that people can use to hook up ready.
129
+ DomReady.ready = function(fn, args) {
130
+ // Attach the listeners
131
+ bindReady();
132
+
133
+ // If the DOM is already ready
134
+ if (isReady) {
135
+ // Execute the function immediately
136
+ fn.call(window, []);
137
+ }
138
+ else {
139
+ // Add the function to the wait list
140
+ readyList.push( function() { return fn.call(window, []); } );
141
+ }
142
+ };
143
+
144
+ NinjsDOM = function() {
145
+ this.cached_selectors = {};
146
+ };
147
+
148
+ // This is the public function that people can use to hook up ready.
149
+ NinjsDOM.prototype.ready = function(fn, args) {
150
+ // Attach the listeners
151
+ bindReady();
152
+
153
+ // If the DOM is already ready
154
+ if (isReady) {
155
+ // Execute the function immediately
156
+ fn.call(window, args || []);
157
+ }
158
+ else {
159
+ // Add the function to the wait list
160
+ readyList.push( function() { return fn.call(window, args || []); } );
161
+ }
162
+ };
163
+
164
+ bindReady();
@@ -0,0 +1,60 @@
1
+ is_defined = function(suspect) {
2
+ return ((suspect === undefined) || (suspect === null)) ? false : true;
3
+ };
4
+
5
+ is_undefined = function(suspect) {
6
+ return (suspect === undefined) ? true : false;
7
+ };
8
+
9
+ is_typeof = function(type, suspect) {
10
+ if (is_undefined(type)) {
11
+ throw new SyntaxError("is_typeof(Type, suspect): type is undefined");
12
+ }
13
+ if (is_undefined(suspect)) {
14
+ throw new SyntaxError("is_typeof(Type, suspect): suspect is undefined");
15
+ }
16
+
17
+ return (suspect.constructor == type) ? true : false;
18
+ };
19
+
20
+ is_numeric = function(suspect) {
21
+ if(is_typeof(Number, suspect)) {
22
+ return true;
23
+ }
24
+ else {
25
+ var pattern = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
26
+ return pattern.test(suspect);
27
+ }
28
+ };
29
+
30
+ is_string = function(suspect) {
31
+ return is_typeof(String, suspect);
32
+ };
33
+
34
+ is_array = function(suspect) {
35
+ return is_typeof(Array, suspect);
36
+ };
37
+
38
+ is_number = function(suspect) {
39
+ return is_typeof(Number, suspect);
40
+ };
41
+
42
+ is_date = function(suspect) {
43
+ return is_typeof(Date, suspect);
44
+ };
45
+
46
+ is_bool = function(suspect) {
47
+ return is_typeof(Boolean, suspect);
48
+ };
49
+
50
+ is_regex = function(suspect) {
51
+ return is_typeof(RegExp, suspect);
52
+ };
53
+
54
+ is_empty = function(suspect) {
55
+ return suspect.length === 0;
56
+ };
57
+
58
+ is_not_empty = function(suspect) {
59
+ return suspect.length >= 1;
60
+ };
@@ -0,0 +1,14 @@
1
+ unless = function(expression, callback, fallback) {
2
+ if (is_undefined(callback)) {
3
+ throw new SyntaxError("unless(expression, callback[, fallback]): callback is undefined");
4
+ }
5
+
6
+ if (!!!expression) {
7
+ callback.call(this);
8
+ }
9
+ else {
10
+ if (is_defined(fallback)) {
11
+ fallback.call(this);
12
+ }
13
+ }
14
+ };
@@ -0,0 +1,66 @@
1
+ NinjsModule = function(name) {
2
+ this.dom = new NinjsDOM(this);
3
+ this.data = {};
4
+ this.name = name;
5
+ };
6
+
7
+ NinjsModule.prototype.actions = function() {};
8
+
9
+ NinjsModule.prototype.run = function() {
10
+ var mod = this;
11
+ this.dom.ready(function() {
12
+ mod.execute();
13
+ });
14
+ };
15
+
16
+ NinjsModule.prototype.execute = function() {
17
+ this.actions();
18
+ };
19
+
20
+ NinjsModule.prototype.elements = function(elements) {
21
+ if (is_undefined(elements)) {
22
+ if (is_typeof(Object, elements)) {
23
+ throw new SyntaxError("NinjsModule.elements(elements): elements is undefined");
24
+ }
25
+ else if (is_string(elements)) {
26
+ throw new SyntaxError("NinjsModule.elements(name): name is undefined");
27
+ }
28
+ }
29
+
30
+ if (is_string(elements)) {
31
+ var name = elements;
32
+ return this.dom.cached_selectors[name];
33
+ }
34
+ else {
35
+ var dom = this.dom;
36
+ dom.ready(function() {
37
+ for(var key in elements) {
38
+ if (elements.hasOwnProperty(key)) {
39
+ dom.cached_selectors[key] = elements[key];
40
+ }
41
+ }
42
+ });
43
+ }
44
+ };
45
+
46
+ NinjsModule.prototype.set_data = function(key, value) {
47
+ if (is_undefined(key)) {
48
+ throw new SyntaxError('NinjsModule.set_data(key, value): key is undefined');
49
+ }
50
+
51
+ if (is_typeof(String, key) && is_undefined(value)) {
52
+ throw new SyntaxError('NinjsModule.set_data(key, value): value is undefined');
53
+ }
54
+
55
+ if (is_typeof(String, key)) {
56
+ this.data[key] = value;
57
+ }
58
+ else if (is_typeof(Object, key)) {
59
+ var data = key;
60
+ for(var property in data) {
61
+ this.data[property] = data[property];
62
+ }
63
+ }
64
+
65
+ return this;
66
+ };
@@ -0,0 +1,5 @@
1
+ //= require "existence"
2
+ //= require "extend"
3
+ //= require "dom"
4
+ //= require "module"
5
+ //= require "application"
@@ -0,0 +1,60 @@
1
+ (function($) {
2
+ NinjsModule.prototype.elements = function(elements, force) {
3
+ var self = this;
4
+
5
+ unless(is_defined(force), function() {
6
+ force = false;
7
+ });
8
+
9
+ if (is_string(elements)) {
10
+ var key = elements;
11
+ if (is_undefined(self.dom[key])) {
12
+ throw new SyntaxError("NinjsModule.elements('" + key + "'): " + self.name + ".dom." + key + " is undefined");
13
+ }
14
+
15
+ if (is_string(self.dom[key])) {
16
+ var selection = $(self.dom[key]);
17
+
18
+ unless(selection.length === 0, function() {
19
+ return self.dom[key] = selection;
20
+ }, function() {
21
+ return self.dom[key];
22
+ });
23
+ }
24
+ else {
25
+ if (self.dom[key].length === 0 || force) {
26
+
27
+ var return_obj = undefined;
28
+
29
+ if (is_string(force)) {
30
+ var selector = self.dom[key].selector;
31
+ self.dom[key] = $(force).find(selector);
32
+ self.dom[key].selector = selector;
33
+
34
+ return_obj = self.dom[key];
35
+ }
36
+
37
+ var selection = $(self.dom[key].selector);
38
+
39
+ unless(selection.length === 0, function() {
40
+ return_obj = selection;
41
+ });
42
+
43
+ return return_obj;
44
+ }
45
+ else {
46
+ return self.dom[key];
47
+ }
48
+ }
49
+ }
50
+ else if (is_typeof(Object, elements)) {
51
+ self.call_on_ready(function() {
52
+ for(var key in elements) {
53
+ if (elements.hasOwnProperty(key)) {
54
+ self.dom[key] = elements[key];
55
+ }
56
+ }
57
+ });
58
+ }
59
+ };
60
+ })(jQuery);
@@ -0,0 +1,3 @@
1
+ //-- This file was automatically generated by Ninjs @ <%= Time.now.to_s %> DO NOT EDIT THIS FILE --//\n"
2
+ <%= ninjs_lib %>
3
+ var <%= @config[:name] %> = new NinjsApplication();
@@ -0,0 +1,3 @@
1
+ /*---------- Ninjs autoload <%= auto_file %> ----------*/
2
+ <%= "//= require #{auto_file}" if is_repo %>
3
+ <%= "//= require \"#{auto_file}\"" unless is_repo %>
@@ -0,0 +1,3 @@
1
+ /*---------- Ninjs core ../lib/nin.js ----------*/
2
+ //= require "../lib/nin.js"
3
+ var <%= @config[:name] %> = new NinjsApplication();
@@ -0,0 +1,3 @@
1
+ /*---------- Ninjs dependency <%= dependency %> ----------*/
2
+ <%= "//= require #{dependency}" if is_repo %>
3
+ <%= "//= require \"#{dependency}\"" unless is_repo %>
@@ -0,0 +1,75 @@
1
+ # src_files
2
+ #
3
+ # Return an array of filepaths relative to src_dir to include before jasmine specs.
4
+ # Default: []
5
+ #
6
+ # EXAMPLE:
7
+ #
8
+ # src_files:
9
+ # - lib/source1.js
10
+ # - lib/source2.js
11
+ # - dist/**/*.js
12
+ #
13
+ src_files:
14
+ - lib/core/*.js
15
+ - lib/extensions/*.js
16
+ - lib/utilities/*.js
17
+
18
+ # stylesheets
19
+ #
20
+ # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
21
+ # Default: []
22
+ #
23
+ # EXAMPLE:
24
+ #
25
+ # stylesheets:
26
+ # - css/style.css
27
+ # - stylesheets/*.css
28
+ #
29
+ stylesheets:
30
+
31
+ # helpers
32
+ #
33
+ # Return an array of filepaths relative to spec_dir to include before jasmine specs.
34
+ # Default: ["helpers/**/*.js"]
35
+ #
36
+ # EXAMPLE:
37
+ #
38
+ # helpers:
39
+ # - helpers/**/*.js
40
+ #
41
+ helpers:
42
+
43
+ # spec_files
44
+ #
45
+ # Return an array of filepaths relative to spec_dir to include.
46
+ # Default: ["**/*[sS]pec.js"]
47
+ #
48
+ # EXAMPLE:
49
+ #
50
+ # spec_files:
51
+ # - **/*[sS]pec.js
52
+ #
53
+ spec_files:
54
+
55
+ # src_dir
56
+ #
57
+ # Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
58
+ # Default: project root
59
+ #
60
+ # EXAMPLE:
61
+ #
62
+ # src_dir: public
63
+ #
64
+ src_dir:
65
+
66
+ # spec_dir
67
+ #
68
+ # Spec directory path. Your spec_files must be returned relative to this path.
69
+ # Default: spec/javascripts
70
+ #
71
+ # EXAMPLE:
72
+ #
73
+ # spec_dir: spec/javascripts
74
+ #
75
+ spec_dir: