eyeballs 0.3.2

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 (47) hide show
  1. data/CHANGELOG +15 -0
  2. data/README.md +293 -0
  3. data/Rakefile +45 -0
  4. data/bin/eyeballs +9 -0
  5. data/config.ru +2 -0
  6. data/dist/jquery-1.4.2.min.js +154 -0
  7. data/dist/jquery.livequery.js +226 -0
  8. data/dist/mustache.js +324 -0
  9. data/eyeballs.gemspec +86 -0
  10. data/eyeballs.js.gemspec +83 -0
  11. data/lib/eyeballs.rb +11 -0
  12. data/lib/eyeballs/app_detector.rb +29 -0
  13. data/lib/eyeballs/app_generator.rb +30 -0
  14. data/lib/eyeballs/cli.rb +14 -0
  15. data/lib/eyeballs/controller_generator.rb +26 -0
  16. data/lib/eyeballs/model_generator.rb +26 -0
  17. data/lib/eyeballs/scaffold_generator.rb +66 -0
  18. data/spec/app_generator_spec.rb +51 -0
  19. data/spec/controller_generator_spec.rb +22 -0
  20. data/spec/model_generator_spec.rb +23 -0
  21. data/spec/rack_app_detector_spec.rb +25 -0
  22. data/spec/scaffold_generator_spec.rb +42 -0
  23. data/spec/spec_helper.rb +42 -0
  24. data/src/jquery.o_O.couchdb.js +107 -0
  25. data/src/jquery.o_O.dom.js +37 -0
  26. data/src/jquery.o_O.js +120 -0
  27. data/src/jquery.o_O.rails.js +68 -0
  28. data/src/o_O.js +286 -0
  29. data/src/o_O.localstorage.js +60 -0
  30. data/templates/app_root/index.html +26 -0
  31. data/templates/controller.js +3 -0
  32. data/templates/model.js +3 -0
  33. data/templates/scaffold_controller.js +75 -0
  34. data/templates/scaffold_edit.html.mustache +13 -0
  35. data/templates/scaffold_index.html +47 -0
  36. data/templates/scaffold_partial.html.mustache +12 -0
  37. data/test/unit/qunit.css +119 -0
  38. data/test/unit/qunit.js +1069 -0
  39. data/test/unit/test_controller.html +137 -0
  40. data/test/unit/test_dom.html +81 -0
  41. data/test/unit/test_dom_with_callbacks.html +121 -0
  42. data/test/unit/test_form.html +42 -0
  43. data/test/unit/test_localstorage.html +79 -0
  44. data/test/unit/test_model.html +136 -0
  45. data/test/unit/test_model_with_callbacks.html +118 -0
  46. data/test/unit/test_rails.html +97 -0
  47. metadata +117 -0
@@ -0,0 +1,136 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+ "http://www.w3.org/TR/html4/loose.dtd">
3
+ <html>
4
+ <head>
5
+ <script src="../../dist/jquery-1.4.2.min.js"></script>
6
+ <script src="../../src/o_O.js"></script>
7
+ <script src="../../src/jquery.o_O.js"></script>
8
+ <script src="../../src/jquery.o_O.dom.js"></script>
9
+ <link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
10
+ <script type="text/javascript" src="qunit.js"></script>
11
+
12
+ <script>
13
+
14
+ o_O.model.adapter = o_O.dom;
15
+
16
+ o_O('Review', function(that){
17
+ that.validates_presence_of('title');
18
+ that.validates_presence_of('content');
19
+ that.validates_length_of('title', {min: 5, max: 15});
20
+ that.validates(function(review){
21
+ if(review.score != 99 && review.test === true)
22
+ {
23
+ review.errors.push({message: 'Score should be 99'})
24
+ }
25
+ })
26
+ that.methods.title_numbered = function(){
27
+ return '1. ' + this.title;
28
+ }
29
+ return that;
30
+ });
31
+
32
+ var MyApp = {};
33
+ o_O('TestModel', function(){}, MyApp);
34
+
35
+ $(document).ready(function(){
36
+
37
+ module("Models");
38
+
39
+ test('binding to a non-global object', 1, function(){
40
+ var test_model = MyApp.TestModel.initialize({title: 'Delicious'})
41
+ equals(test_model.title, 'Delicious', 'should just work as normal')
42
+ })
43
+
44
+ test('serialization',1, function(){
45
+ var myReview = Review.initialize({title: 'Groovy'})
46
+ equals(myReview.to_json(), '{"title":"Groovy","_model_name":"Review"}', 'should serialize nicely')
47
+ })
48
+
49
+ test('useful attributes',2, function(){
50
+ equals(Review.model_name, 'Review', 'should give me a model name');
51
+ equals(Review.table_name, 'reviews', 'should give me a table name');
52
+ })
53
+
54
+ test('multiple initialization', 1, function(){
55
+ a = Review.initialize()
56
+ b = Review.initialize()
57
+ equals(a.id == b.id, false, 'they should have different ids')
58
+ })
59
+
60
+ test('a valid review', 3, function(){
61
+ var myReview = Review.initialize({title: "Biscuit", content: "Some Content"});
62
+ myReview.save();
63
+ equals(myReview.title, 'Biscuit', 'Title should be Biscuit');
64
+ equals(myReview.valid(), true, 'valid() should return true');
65
+ equals(myReview.save().title, 'Biscuit', 'save() should return object');
66
+ });
67
+
68
+ test('an invalid review',1, function(){
69
+ var myReview = Review.initialize();
70
+ myReview.save();
71
+ equals(myReview.errors.length, 2, "should have 2 errors");
72
+ });
73
+
74
+ test('editing a review', 2, function(){
75
+ myReview = Review.find('paul');
76
+ equals(myReview.title, 'Yeah!', 'should pull in title');
77
+ equals(myReview.content, 'Paris', 'should pull in content');
78
+ })
79
+
80
+ test('updating a review', 2, function(){
81
+ myReview = Review.find('paul');
82
+ myReview.update_attributes({title: 'No!', content: 'Dublin'});
83
+ equals(myReview.title, 'No!', 'should update the title');
84
+ equals(myReview.content, 'Dublin', 'should update the content');
85
+ })
86
+
87
+ test('updating a review invalid', 1, function(){
88
+ myReview = Review.find('paul');
89
+ myReview.update_attributes({title: '', content: ''});
90
+ equals(myReview.errors.length, 2, "should have 2 errors");
91
+ })
92
+
93
+ test('defining methods should work',1, function(){
94
+ myReview = Review.initialize({title: 'Boom'})
95
+ equals(myReview.title_numbered(), '1. Boom', 'the method definition should work');
96
+ });
97
+
98
+ test('validates length of', 6, function(){
99
+ myReview = Review.initialize({title: "finger baby babylon babe face", content: "something"});
100
+ myReview.save();
101
+ equals(myReview.errors.length, 1, "should have an error");
102
+ equals(myReview.errors[0].field, 'title', 'should be on title');
103
+ equals(myReview.errors[0].type, 'length', 'should be length')
104
+ equals(myReview.errors[0].message, 'title should be less than 15 characters', 'should have an error message')
105
+ myReview.title = 'the'
106
+ myReview.save();
107
+ equals(myReview.errors.length, 1, "should still only have one error");
108
+ equals(myReview.errors[0].message, 'title should be greater than 5 characters', 'should have an error message')
109
+ });
110
+
111
+ test('custom validation', 3, function(){
112
+ myReview = Review.initialize({title: 'Badabing', content: 'Badaboom', score: 0, test: true})
113
+ myReview.save();
114
+ equals(myReview.errors.length, 1, "should have an error");
115
+ equals(myReview.errors[0].message, 'Score should be 99', "should give me my custom error message");
116
+ myReview.score = 99;
117
+ myReview.save()
118
+ equals(myReview.errors.length, 0, "should have no errors");
119
+ })
120
+
121
+ });
122
+ </script>
123
+
124
+ </head>
125
+ <body>
126
+ <h1 id="qunit-header">Model Tests</h1>
127
+ <h2 id="qunit-banner"></h2>
128
+ <h2 id="qunit-userAgent"></h2>
129
+ <ol id="qunit-tests"></ol>
130
+
131
+ <div data-model="Review" data-id="paul">
132
+ <h1 data-attribute="title">Yeah!</h1>
133
+ <p data-attribute="content">Paris</p>
134
+ </div>
135
+ </body>
136
+ </html>
@@ -0,0 +1,118 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+ "http://www.w3.org/TR/html4/loose.dtd">
3
+ <html>
4
+ <head>
5
+ <script src="../../dist/jquery-1.4.2.min.js"></script>
6
+ <script src="../../src/o_O.js"></script>
7
+ <script src="../../src/jquery.o_O.js"></script>
8
+ <script src="../../src/jquery.o_O.dom.js"></script>
9
+ <link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
10
+ <script type="text/javascript" src="qunit.js"></script>
11
+
12
+ <script>
13
+
14
+ o_O('Review', function(that){
15
+ that.validates_presence_of('title');
16
+ that.validates_presence_of('content');
17
+ that.validates_length_of('title', {min: 5, max: 15});
18
+ that.validates(function(review){
19
+ if(review.score != 99 && review.test === true)
20
+ {
21
+ review.errors.push({message: 'Score should be 99'})
22
+ }
23
+ })
24
+ that.methods.title_numbered = function(){
25
+ return '1. ' + this.title;
26
+ }
27
+ return that;
28
+ });
29
+
30
+ $(document).ready(function(){
31
+
32
+ module("Models");
33
+
34
+ asyncTest('a valid, successful model', 2, function(){
35
+ var myReview = Review.initialize({title: "Biscuit", content: "Some Content"});
36
+ myReview.save({
37
+ loading: function(){
38
+ ok('should call the loading callback before success')
39
+ },
40
+ success: function(){
41
+ ok('should call the success callback')
42
+ start();
43
+ }
44
+ });
45
+ });
46
+
47
+ asyncTest('an invalid review',1, function(){
48
+ var myReview = Review.initialize();
49
+ myReview.save({
50
+ success:function(){
51
+ ok(false, 'should not call the success callback');
52
+ },
53
+ invalid: function(){
54
+ ok('should call the invalid callback');
55
+ start();
56
+ },
57
+ loading: function(){
58
+ ok(false, 'should not call the loading callback');
59
+ }
60
+ });
61
+ });
62
+
63
+ asyncTest('updating a review', 2, function(){
64
+ var myReview = Review.initialize({title: "Biscuit", content: "Some Content"});
65
+ myReview.update_attributes({title: 'No! is it', content: 'Dublin'}, {
66
+ success: function(){
67
+ ok('should call the success callback');
68
+ start();
69
+ },
70
+ invalid: function(){
71
+ ok(false, 'should not cal the invalid callback');
72
+ },
73
+ loading: function(){
74
+ ok('should call the loading callback');
75
+ }
76
+ });
77
+ })
78
+
79
+ asyncTest('updating an invalid review', 1, function(){
80
+ var myReview = Review.initialize();
81
+ myReview.update_attributes({}, {
82
+ success: function(){
83
+ ok(false, 'should not call the success callback');
84
+ },
85
+ invalid: function(){
86
+ ok(true, 'should call the invalid callback');
87
+ start();
88
+ },
89
+ loading: function(){
90
+ ok(false, 'should not call the loading callback');
91
+ }
92
+ });
93
+ })
94
+
95
+ test('destroying a review', 2, function(){
96
+ var myReview = Review.initialize();
97
+ myReview.destroy({
98
+ loading: function(){
99
+ ok('loading should be run');
100
+ },
101
+ success: function(){
102
+ ok('success should be run');
103
+ }
104
+ })
105
+ })
106
+
107
+ });
108
+ </script>
109
+
110
+ </head>
111
+ <body>
112
+ <h1 id="qunit-header">Model Tests (with callbacks)</h1>
113
+ <h2 id="qunit-banner"></h2>
114
+ <h2 id="qunit-userAgent"></h2>
115
+ <ol id="qunit-tests"></ol>
116
+ </div>
117
+ </body>
118
+ </html>
@@ -0,0 +1,97 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+ "http://www.w3.org/TR/html4/loose.dtd">
3
+ <html>
4
+ <head>
5
+ <script src="../../dist/jquery-1.4.2.min.js"></script>
6
+ <script src="../../dist/jquery.livequery.js"></script>
7
+
8
+ <script src="../../src/o_O.js"></script>
9
+ <script src="../../src/jquery.o_O.rails.js"></script>
10
+ <script src="../../src/jquery.o_O.js"></script>
11
+ <link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
12
+ <script type="text/javascript" src="qunit.js"></script>
13
+
14
+ <script>
15
+
16
+
17
+ $(document).ready(function(){
18
+
19
+ o_O.model.adapter = o_O.rails;
20
+
21
+ module("Rails Test (with jQuery)");
22
+
23
+ o_O('Review', function(){})
24
+
25
+ asyncTest('storing a basic basic thing', 3, function(){
26
+ var review = Review.initialize({title: 'Magic!'})
27
+ review.save(function(saved_review){
28
+ equals(saved_review.title, review.title, 'title should match');
29
+ equals(saved_review.id, '1', "Rails should give back the ID");
30
+ equals(saved_review.model_name, 'Review', 'should save the model name');
31
+ start();
32
+ });
33
+ });
34
+
35
+ asyncTest('pulling something in', 2, function(){
36
+ var review = Review.initialize({title: 'More Magic!'});
37
+ review.save(function(){
38
+ found_review = Review.find(review.id, function(found_review){
39
+ equals(found_review.title, 'More Magic!', 'should be able to find stuff in local storage')
40
+ equals(found_review.id, '1', 'should persist the id')
41
+ start();
42
+ });
43
+ });
44
+ })
45
+
46
+ asyncTest('getting all', 2, function(){
47
+ var review = Review.initialize({title: 'Local, baby'});
48
+ review.save(function(saved_review){
49
+ Review.all(function(documents){
50
+ equals(documents[0].title, 'Local, baby', 'It should pull in everything')
51
+ equals(documents[0].id, '1', 'It should persist the id')
52
+ start();
53
+ })
54
+ });
55
+ })
56
+
57
+ asyncTest('setting new_record attribute', 2, function(){
58
+ var review = Review.initialize()
59
+ equals(review.new_record, true, 'should be a new record review');
60
+ review.save(function(saved_review){
61
+ console.log(saved_review)
62
+ equals(saved_review.new_record, false, 'should not be a new record after')
63
+ start();
64
+ });
65
+ })
66
+
67
+ asyncTest('updating', 1, function(){
68
+ var review = Review.initialize({title: 'Doomed!'});
69
+ review.save(function(saved_review){
70
+ saved_review.update_attributes({title: 'Tennessee'}, function(saved_review){
71
+ equals(saved_review.title, 'Tennessee', 'Title should have been updated');
72
+ start();
73
+ });
74
+ });
75
+ });
76
+
77
+ asyncTest('deleting', 1, function(){
78
+ var review = Review.initialize({title: 'Doomed!'});
79
+ review.save(function(saved_review){
80
+ saved_review.destroy(function(destroyed_review){
81
+ equals(destroyed_review.destroyed, true, 'It should have deleted the doc')
82
+ start()
83
+ });
84
+ });
85
+ })
86
+
87
+ });
88
+ </script>
89
+
90
+ </head>
91
+ <body>
92
+ <h1 id="qunit-header">Rails Tests (with jQuery)</h1>
93
+ <h2 id="qunit-banner"></h2>
94
+ <h2 id="qunit-userAgent"></h2>
95
+ <ol id="qunit-tests"></ol>
96
+ </body>
97
+ </html>
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eyeballs
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 2
10
+ version: 0.3.2
11
+ platform: ruby
12
+ authors:
13
+ - Paul Campbell
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-06-09 00:00:00 -04:00
19
+ default_executable: eyeballs
20
+ dependencies: []
21
+
22
+ description:
23
+ email: paul@rslw.com
24
+ executables:
25
+ - eyeballs
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.md
30
+ files:
31
+ - CHANGELOG
32
+ - README.md
33
+ - Rakefile
34
+ - bin/eyeballs
35
+ - config.ru
36
+ - dist/jquery-1.4.2.min.js
37
+ - dist/jquery.livequery.js
38
+ - dist/mustache.js
39
+ - eyeballs.gemspec
40
+ - eyeballs.js.gemspec
41
+ - lib/eyeballs.rb
42
+ - lib/eyeballs/app_detector.rb
43
+ - lib/eyeballs/app_generator.rb
44
+ - lib/eyeballs/cli.rb
45
+ - lib/eyeballs/controller_generator.rb
46
+ - lib/eyeballs/model_generator.rb
47
+ - lib/eyeballs/scaffold_generator.rb
48
+ - src/jquery.o_O.couchdb.js
49
+ - src/jquery.o_O.dom.js
50
+ - src/jquery.o_O.js
51
+ - src/jquery.o_O.rails.js
52
+ - src/o_O.js
53
+ - src/o_O.localstorage.js
54
+ - templates/app_root/index.html
55
+ - templates/controller.js
56
+ - templates/model.js
57
+ - templates/scaffold_controller.js
58
+ - templates/scaffold_edit.html.mustache
59
+ - templates/scaffold_index.html
60
+ - templates/scaffold_partial.html.mustache
61
+ - test/unit/qunit.css
62
+ - test/unit/qunit.js
63
+ - test/unit/test_controller.html
64
+ - test/unit/test_dom.html
65
+ - test/unit/test_dom_with_callbacks.html
66
+ - test/unit/test_form.html
67
+ - test/unit/test_localstorage.html
68
+ - test/unit/test_model.html
69
+ - test/unit/test_model_with_callbacks.html
70
+ - test/unit/test_rails.html
71
+ - spec/app_generator_spec.rb
72
+ - spec/controller_generator_spec.rb
73
+ - spec/model_generator_spec.rb
74
+ - spec/rack_app_detector_spec.rb
75
+ - spec/scaffold_generator_spec.rb
76
+ - spec/spec_helper.rb
77
+ has_rdoc: false
78
+ homepage: http://www.github.com/paulca/eyeballs.js
79
+ licenses: []
80
+
81
+ post_install_message:
82
+ rdoc_options:
83
+ - --charset=UTF-8
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 3
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ hash: 3
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ requirements: []
105
+
106
+ rubyforge_project:
107
+ rubygems_version: 1.3.7
108
+ signing_key:
109
+ specification_version: 3
110
+ summary: A lightweight javascript MVC framework.
111
+ test_files:
112
+ - spec/app_generator_spec.rb
113
+ - spec/controller_generator_spec.rb
114
+ - spec/model_generator_spec.rb
115
+ - spec/rack_app_detector_spec.rb
116
+ - spec/scaffold_generator_spec.rb
117
+ - spec/spec_helper.rb