eyeballs 0.3.7 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. data/CHANGELOG +6 -0
  2. data/Gemfile +13 -0
  3. data/Gemfile.lock +47 -0
  4. data/README.md +62 -17
  5. data/Rakefile +1 -1
  6. data/dist/{jquery-1.4.2.min.js → jquery/jquery-1.4.2.min.js} +0 -0
  7. data/dist/jquery/jquery.ba-hashchange.js +244 -0
  8. data/dist/{jquery.livequery.js → jquery/jquery.livequery.js} +0 -0
  9. data/dist/{mustache.js → mustache/mustache.0.2.3.js} +27 -50
  10. data/eyeballs.gemspec +23 -14
  11. data/lib/eyeballs/app_generator.rb +3 -3
  12. data/spec/app_generator_spec.rb +7 -1
  13. data/spec/spec_helper.rb +1 -2
  14. data/src/{o_O.localstorage.js → adapters/o_O.localstorage.js} +0 -0
  15. data/src/{jquery.o_O.couchdb.js → drivers/jquery/adapters/o_O.couchdb.js} +0 -0
  16. data/src/{jquery.o_O.dom.js → drivers/jquery/adapters/o_O.dom.js} +0 -0
  17. data/src/{jquery.o_O.rails.js → drivers/jquery/adapters/o_O.rest.js} +1 -1
  18. data/src/{jquery.o_O.js → drivers/jquery/modules/o_O.controller.js} +3 -65
  19. data/src/drivers/jquery/modules/o_O.routes.js +45 -0
  20. data/src/drivers/jquery/modules/o_O.support.js +69 -0
  21. data/src/modules/o_O.model.js +188 -0
  22. data/src/modules/o_O.validations.js +45 -0
  23. data/src/o_O.js +0 -235
  24. data/templates/app_root/config/initializer.js +3 -0
  25. data/templates/app_root/config/routes.js +7 -0
  26. data/test/unit/test_controller.html +7 -7
  27. data/test/unit/test_dom.html +7 -4
  28. data/test/unit/test_dom_with_callbacks.html +7 -3
  29. data/test/unit/test_form.html +7 -2
  30. data/test/unit/test_localstorage.html +7 -4
  31. data/test/unit/test_model.html +7 -3
  32. data/test/unit/test_model_with_callbacks.html +7 -3
  33. data/test/unit/{test_rails.html → test_rest.html} +9 -6
  34. data/test/unit/test_routing.html +76 -0
  35. metadata +39 -15
  36. data/eyeballs.js.gemspec +0 -83
@@ -0,0 +1,188 @@
1
+ o_O.model = {
2
+ adapter: false,
3
+ initialize: function(model_name, callback){
4
+ var callback = callback;
5
+ var class_methods, instance_methods, initializer_methods;
6
+ var validates_presence_of, validates_length_of;
7
+ var table_name = model_name.toLowerCase() + 's';
8
+
9
+ class_methods = {
10
+ validations: {presence: [], lengthliness: [], custom: []},
11
+ methods: {},
12
+ validates_presence_of: function(field){
13
+ this.validations.presence.push({field: field});
14
+ },
15
+ validates_length_of: function(field, options){
16
+ options.field = field;
17
+ this.validations.lengthliness.push(options);
18
+ },
19
+ validates: function(validation){
20
+ this.validations.custom.push(validation)
21
+ }
22
+ }
23
+
24
+ var run_callback = function(callback, method, args){
25
+ try{
26
+ if(typeof callback === 'function' && method === 'success')
27
+ {
28
+ callback(args);
29
+ }
30
+ if(typeof callback === 'object' && typeof callback[method] === 'function')
31
+ {
32
+ callback[method](args);
33
+ }
34
+ }
35
+ catch(e)
36
+ {
37
+ if(typeof console === 'object')
38
+ {
39
+ console.log(e);
40
+ }
41
+ else
42
+ {
43
+ alert(e);
44
+ }
45
+ }
46
+ }
47
+
48
+ var config = callback(class_methods);
49
+ instance_methods = {
50
+ adapter: o_O.model.adapter,
51
+ destroy: function(callback){
52
+ run_callback(callback, 'loading', this)
53
+ if(this.adapter)
54
+ {
55
+ this.adapter.destroy(this, function(returned_object){
56
+ run_callback(callback, 'success', returned_object);
57
+ });
58
+ }
59
+ else
60
+ {
61
+ run_callback(callback, 'success', this)
62
+ }
63
+ return this;
64
+ },
65
+ model_name: model_name,
66
+ save: function(callback){
67
+ if(this.valid())
68
+ {
69
+ run_callback(callback, 'loading', this);
70
+ if(this.adapter)
71
+ {
72
+ var model = this;
73
+ this.adapter.save(this, function(returned_object){
74
+ var initialized_object = o_O.models[model.model_name].initialize(returned_object);
75
+ initialized_object.new_record = false;
76
+ run_callback(callback, 'success', initialized_object);
77
+ });
78
+ }
79
+ else
80
+ {
81
+ run_callback(callback, 'success', this);
82
+ }
83
+ return this;
84
+ }
85
+ else
86
+ {
87
+ run_callback(callback, 'invalid', this);
88
+ }
89
+ },
90
+ table_name: table_name,
91
+ to_json: function(){
92
+ var serialized_object = {};
93
+ for(var i = 0; i < this.attributes.length; i++);
94
+ {
95
+ var index = i - 1;
96
+ var attribute_name = this.attributes[index];
97
+ serialized_object[this.attributes[index]] = this[this.attributes[index]];
98
+ }
99
+ serialized_object._model_name = this.model_name;
100
+ return JSON.stringify(serialized_object);
101
+ },
102
+ update_attributes: function(attributes, callback){
103
+ for(var attribute in attributes)
104
+ {
105
+ this[attribute] = attributes[attribute];
106
+ }
107
+ this.save(callback);
108
+ },
109
+ valid: function(){
110
+ this.errors = [];
111
+
112
+ o_O.validations.run(this);
113
+
114
+ if(this.errors.length == 0)
115
+ {
116
+ return true;
117
+ }
118
+ else
119
+ {
120
+ return false;
121
+ }
122
+ },
123
+ errors: [],
124
+ validations: class_methods.validations
125
+ }
126
+ for(method in class_methods.methods)
127
+ {
128
+ instance_methods[method] = class_methods.methods[method]
129
+ }
130
+
131
+ initializer_methods = {
132
+ adapter: o_O.model.adapter,
133
+ all: function(callback){
134
+ if(this.adapter)
135
+ {
136
+ return this.adapter.all(this, callback);
137
+ }
138
+ },
139
+ initialize: function(attributes){
140
+ if(!attributes) { var attributes = {}; };
141
+ var initialized_attributes = [];
142
+ for( var attribute in attributes )
143
+ {
144
+ initialized_attributes.push(attribute);
145
+ }
146
+ attributes['attributes'] = initialized_attributes;
147
+ for ( var method in instance_methods ) {
148
+ attributes[method] = instance_methods[method];
149
+ }
150
+ if(!attributes['id'])
151
+ {
152
+ attributes['id'] = o_O.uuid();
153
+ }
154
+ if(!attributes['new_record'])
155
+ {
156
+ attributes['new_record'] = true;
157
+ }
158
+ return attributes;
159
+ },
160
+ find: function(id, callback){
161
+ if(this.adapter)
162
+ {
163
+ run_callback(callback, 'loading', this)
164
+ var model = this;
165
+ return this.adapter.find(this, id, function(returned_object){
166
+ found_object = model.initialize(returned_object);
167
+ if(!found_object['new_record'])
168
+ {
169
+ found_object['new_record'] = false;
170
+ }
171
+ if(found_object.id)
172
+ {
173
+ run_callback(callback, 'success', found_object);
174
+ }
175
+ else
176
+ {
177
+ run_callback(callback, 'failure', found_object);
178
+ }
179
+ }, callback);
180
+ }
181
+ },
182
+ model_name: model_name,
183
+ table_name: table_name
184
+ }
185
+
186
+ return initializer_methods;
187
+ }
188
+ }
@@ -0,0 +1,45 @@
1
+ o_O.validations = {
2
+ run: function(object){
3
+ this.run_custom_validations(object);
4
+ this.run_length_validations(object);
5
+ this.run_presence_validations(object);
6
+ },
7
+ run_custom_validations: function(object){
8
+ for(var i = 0; i < object.validations.custom.length; i++)
9
+ {
10
+ object.validations.custom[i](object);
11
+ }
12
+ },
13
+ run_length_validations: function(object){
14
+ for(var i = 0; i < object.validations.lengthliness.length; i++)
15
+ {
16
+ var field = object.validations.lengthliness[i].field;
17
+ var max = object.validations.lengthliness[i].max
18
+ var min = object.validations.lengthliness[i].min
19
+ if(object[field])
20
+ {
21
+ if(max && object[field].length > max)
22
+ {
23
+ var message = field + ' should be less than ' + max + ' characters';
24
+ object.errors.push({field: field, type: 'length', message: message});
25
+ }
26
+ if(min && object[field].length < min)
27
+ {
28
+ var message = field + ' should be greater than ' + min + ' characters';
29
+ object.errors.push({field: field, type: 'length', message: message});
30
+ }
31
+ }
32
+ }
33
+ },
34
+ run_presence_validations: function(object){
35
+ for(var i = 0; i < object.validations.presence.length; i++)
36
+ {
37
+ var field = object.validations.presence[i].field;
38
+ if(object[field] == '' || object[field] == null)
39
+ {
40
+ var message = field + ' should be present';
41
+ object.errors.push({field: field, type: 'presence', message: message})
42
+ }
43
+ }
44
+ }
45
+ }
data/src/o_O.js CHANGED
@@ -28,241 +28,6 @@ var o_O = function(){
28
28
  }
29
29
  }
30
30
 
31
- o_O.model = {
32
- adapter: false,
33
- initialize: function(model_name, callback){
34
- var callback = callback;
35
- var class_methods, instance_methods, initializer_methods;
36
- var validates_presence_of, validates_length_of;
37
- var table_name = model_name.toLowerCase() + 's';
38
-
39
- class_methods = {
40
- validations: {presence: [], lengthliness: [], custom: []},
41
- methods: {},
42
- validates_presence_of: function(field){
43
- this.validations.presence.push({field: field});
44
- },
45
- validates_length_of: function(field, options){
46
- options.field = field;
47
- this.validations.lengthliness.push(options);
48
- },
49
- validates: function(validation){
50
- this.validations.custom.push(validation)
51
- }
52
- }
53
-
54
- var run_callback = function(callback, method, args){
55
- try{
56
- if(typeof callback === 'function' && method === 'success')
57
- {
58
- callback(args);
59
- }
60
- if(typeof callback === 'object' && typeof callback[method] === 'function')
61
- {
62
- callback[method](args);
63
- }
64
- }
65
- catch(e)
66
- {
67
- if(typeof console === 'object')
68
- {
69
- console.log(e);
70
- }
71
- else
72
- {
73
- alert(e);
74
- }
75
- }
76
- }
77
-
78
- var config = callback(class_methods);
79
- instance_methods = {
80
- adapter: o_O.model.adapter,
81
- destroy: function(callback){
82
- run_callback(callback, 'loading', this)
83
- if(this.adapter)
84
- {
85
- this.adapter.destroy(this, function(returned_object){
86
- run_callback(callback, 'success', returned_object);
87
- });
88
- }
89
- else
90
- {
91
- run_callback(callback, 'success', this)
92
- }
93
- return this;
94
- },
95
- model_name: model_name,
96
- save: function(callback){
97
- if(this.valid())
98
- {
99
- run_callback(callback, 'loading', this);
100
- if(this.adapter)
101
- {
102
- var model = this;
103
- this.adapter.save(this, function(returned_object){
104
- var initialized_object = o_O.models[model.model_name].initialize(returned_object);
105
- initialized_object.new_record = false;
106
- run_callback(callback, 'success', initialized_object);
107
- });
108
- }
109
- else
110
- {
111
- run_callback(callback, 'success', this);
112
- }
113
- return this;
114
- }
115
- else
116
- {
117
- run_callback(callback, 'invalid', this);
118
- }
119
- },
120
- table_name: table_name,
121
- to_json: function(){
122
- var serialized_object = {};
123
- for(var i = 0; i < this.attributes.length; i++);
124
- {
125
- var index = i - 1;
126
- var attribute_name = this.attributes[index];
127
- serialized_object[this.attributes[index]] = this[this.attributes[index]];
128
- }
129
- serialized_object._model_name = this.model_name;
130
- return JSON.stringify(serialized_object);
131
- },
132
- update_attributes: function(attributes, callback){
133
- for(var attribute in attributes)
134
- {
135
- this[attribute] = attributes[attribute];
136
- }
137
- this.save(callback);
138
- },
139
- valid: function(){
140
- this.errors = [];
141
-
142
- o_O.validations.run(this);
143
-
144
- if(this.errors.length == 0)
145
- {
146
- return true;
147
- }
148
- else
149
- {
150
- return false;
151
- }
152
- },
153
- errors: [],
154
- validations: class_methods.validations
155
- }
156
- for(method in class_methods.methods)
157
- {
158
- instance_methods[method] = class_methods.methods[method]
159
- }
160
-
161
- initializer_methods = {
162
- adapter: o_O.model.adapter,
163
- all: function(callback){
164
- if(this.adapter)
165
- {
166
- return this.adapter.all(this, callback);
167
- }
168
- },
169
- initialize: function(attributes){
170
- if(!attributes) { var attributes = {}; };
171
- var initialized_attributes = [];
172
- for( var attribute in attributes )
173
- {
174
- initialized_attributes.push(attribute);
175
- }
176
- attributes['attributes'] = initialized_attributes;
177
- for ( var method in instance_methods ) {
178
- attributes[method] = instance_methods[method];
179
- }
180
- if(!attributes['id'])
181
- {
182
- attributes['id'] = o_O.uuid();
183
- }
184
- if(!attributes['new_record'])
185
- {
186
- attributes['new_record'] = true;
187
- }
188
- return attributes;
189
- },
190
- find: function(id, callback){
191
- if(this.adapter)
192
- {
193
- run_callback(callback, 'loading', this)
194
- var model = this;
195
- return this.adapter.find(this, id, function(returned_object){
196
- found_object = model.initialize(returned_object);
197
- if(!found_object['new_record'])
198
- {
199
- found_object['new_record'] = false;
200
- }
201
- if(found_object.id)
202
- {
203
- run_callback(callback, 'success', found_object);
204
- }
205
- else
206
- {
207
- run_callback(callback, 'failure', found_object);
208
- }
209
- }, callback);
210
- }
211
- },
212
- model_name: model_name,
213
- table_name: table_name
214
- }
215
-
216
- return initializer_methods;
217
- }
218
- }
219
-
220
- o_O.validations = {
221
- run: function(object){
222
- this.run_custom_validations(object);
223
- this.run_length_validations(object);
224
- this.run_presence_validations(object);
225
- },
226
- run_custom_validations: function(object){
227
- for(var i = 0; i < object.validations.custom.length; i++)
228
- {
229
- object.validations.custom[i](object);
230
- }
231
- },
232
- run_length_validations: function(object){
233
- for(var i = 0; i < object.validations.lengthliness.length; i++)
234
- {
235
- var field = object.validations.lengthliness[i].field;
236
- var max = object.validations.lengthliness[i].max
237
- var min = object.validations.lengthliness[i].min
238
- if(object[field])
239
- {
240
- if(max && object[field].length > max)
241
- {
242
- var message = field + ' should be less than ' + max + ' characters';
243
- object.errors.push({field: field, type: 'length', message: message});
244
- }
245
- if(min && object[field].length < min)
246
- {
247
- var message = field + ' should be greater than ' + min + ' characters';
248
- object.errors.push({field: field, type: 'length', message: message});
249
- }
250
- }
251
- }
252
- },
253
- run_presence_validations: function(object){
254
- for(var i = 0; i < object.validations.presence.length; i++)
255
- {
256
- var field = object.validations.presence[i].field;
257
- if(object[field] == '' || object[field] == null)
258
- {
259
- var message = field + ' should be present';
260
- object.errors.push({field: field, type: 'presence', message: message})
261
- }
262
- }
263
- }
264
- }
265
-
266
31
  o_O.config = {}
267
32
  o_O.templates = {}
268
33