choco 0.1.0 → 0.1.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.
- data/.gitignore +2 -0
- data/HISTORY +9 -1
- data/README.rdoc +19 -10
- data/choco.gemspec +7 -2
- data/lib/choco.rb +1 -1
- data/lib/choco/dependency_manager.rb +1 -1
- data/lib/choco/generators/app_generator.rb +1 -4
- data/lib/choco/generators/controller_generator.rb +2 -2
- data/lib/choco/generators/scaffold_generator.rb +2 -0
- data/lib/choco/generators/templates/lib/application.js +3 -0
- data/lib/choco/generators/templates/views/edit.template +8 -8
- data/lib/choco/generators/templates/views/index.template +11 -11
- data/lib/choco/generators/templates/views/new.template +8 -8
- data/lib/choco/generators/templates/views/show.template +7 -7
- data/spec/choco_spec.rb +0 -3
- data/spec/dependency_manager_spec.rb +106 -0
- data/spec/generators_spec.rb +300 -0
- data/spec/spec_helper.rb +8 -0
- metadata +8 -3
data/.gitignore
CHANGED
data/HISTORY
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
-
== 0.1.
|
1
|
+
== 0.1.1 [07-27-10]
|
2
|
+
|
3
|
+
* Clean generated HTML (indentation)
|
4
|
+
* Add lib/application.js file at project generation
|
5
|
+
* Remove compressed folder
|
6
|
+
* When a controller is deleted, the watcher script removes it from the app controller
|
7
|
+
* Add specifications
|
8
|
+
|
9
|
+
== 0.1.0 [07-23-10]
|
2
10
|
|
3
11
|
* Initial release
|
data/README.rdoc
CHANGED
@@ -20,6 +20,11 @@ Choco is based on powerful libaries :
|
|
20
20
|
|
21
21
|
Huge thanks to Aaron Quint and Ben Pickles for their incredible work.
|
22
22
|
|
23
|
+
A sample project based on Rails 3 is available here : http://github.com/ahe/choco_demo
|
24
|
+
|
25
|
+
An awesome screencast with an awesome belgian accent is available here :
|
26
|
+
http://www.2dconcept.com/images/choco.mov
|
27
|
+
|
23
28
|
== Installation
|
24
29
|
|
25
30
|
Choco is a Ruby gem, simply install it :
|
@@ -93,39 +98,39 @@ You have to include this # in every HTML link you add into your views.
|
|
93
98
|
|
94
99
|
A Choco project has the following structure :
|
95
100
|
|
96
|
-
|
101
|
+
=== Jimfile
|
97
102
|
This file list all the dependencies for your project (libraries & local files).
|
98
103
|
|
99
|
-
|
104
|
+
=== app
|
100
105
|
It contains four sub-folders : controllers, helpers, models & views.
|
101
106
|
This is where you will spend most of your development time.
|
102
107
|
|
103
|
-
|
108
|
+
=== compressed
|
104
109
|
This is where the bundled.js file is created, it bundles all your JS files in one single file.
|
105
110
|
It is highly recommended to compress this file before going live (rake choco:deploy).
|
106
111
|
|
107
|
-
|
112
|
+
=== images
|
108
113
|
Store all the images used by your application in this folder.
|
109
114
|
|
110
|
-
|
115
|
+
=== index.html
|
111
116
|
This is the file you have to open in your browser to launch your Choco application.
|
112
117
|
It includes your bundled.js file, your stylesheets and defines the layout of your application.
|
113
118
|
|
114
119
|
The #choco div is very important, this is where the HTML generated by your views will be inserted.
|
115
120
|
If you change his name, you must configure it into the app/controllers/application_controller.js as well.
|
116
121
|
|
117
|
-
|
122
|
+
=== lib
|
118
123
|
Use this folder to store your JS files which are specific to your project but don't have their place in the app folder.
|
119
124
|
If this is a library that can be used by other projects, you should use Jim instead.
|
120
125
|
|
121
|
-
|
126
|
+
=== script
|
122
127
|
This folder contains the choco script file.
|
123
128
|
It brings you a few generators (model, controller, layout, scaffold, json, plugin).
|
124
129
|
|
125
|
-
|
130
|
+
=== spec
|
126
131
|
Test your application using Behavior Driven Development (BDD).
|
127
132
|
|
128
|
-
|
133
|
+
=== stylesheets
|
129
134
|
Store all the stylesheets used by your application in this folder.
|
130
135
|
|
131
136
|
= A first resource (CRUD)
|
@@ -306,6 +311,10 @@ Then just copy the required files on your web server.
|
|
306
311
|
BDD is currently being implemented, it will be soon very easy to test all the parts of your Choco apps.
|
307
312
|
A first solution can be found here : http://github.com/ahe/sammy_demo/tree/master/test/javascript
|
308
313
|
|
314
|
+
= Mailing list
|
315
|
+
|
316
|
+
http://groups.google.com/group/choco-js
|
317
|
+
|
309
318
|
= Note on Patches/Pull Requests
|
310
319
|
|
311
320
|
* Fork the project.
|
@@ -316,7 +325,7 @@ A first solution can be found here : http://github.com/ahe/sammy_demo/tree/maste
|
|
316
325
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
317
326
|
* Send me a pull request. Bonus points for topic branches.
|
318
327
|
|
319
|
-
|
328
|
+
= Copyright
|
320
329
|
|
321
330
|
Copyright (c) 2010 Anthony Heukmes. See LICENSE for details.
|
322
331
|
|
data/choco.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{choco}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Anthony Heukmes"]
|
12
|
-
s.date = %q{2010-07-
|
12
|
+
s.date = %q{2010-07-27}
|
13
13
|
s.default_executable = %q{choco}
|
14
14
|
s.description = %q{Choco brings the MVC to the client side! It allows you to easily develop maintainable Rich Internet Applications using Javascript.}
|
15
15
|
s.email = %q{anthony.heukmes@skynet.be}
|
@@ -48,6 +48,7 @@ Gem::Specification.new do |s|
|
|
48
48
|
"lib/choco/generators/templates/help/generators",
|
49
49
|
"lib/choco/generators/templates/helpers/application_helper.js",
|
50
50
|
"lib/choco/generators/templates/index.html",
|
51
|
+
"lib/choco/generators/templates/lib/application.js",
|
51
52
|
"lib/choco/generators/templates/lib/plugin.js",
|
52
53
|
"lib/choco/generators/templates/models/base.js",
|
53
54
|
"lib/choco/generators/templates/views/edit.template",
|
@@ -57,6 +58,8 @@ Gem::Specification.new do |s|
|
|
57
58
|
"lib/choco/generators/templates/views/new.template",
|
58
59
|
"lib/choco/generators/templates/views/show.template",
|
59
60
|
"spec/choco_spec.rb",
|
61
|
+
"spec/dependency_manager_spec.rb",
|
62
|
+
"spec/generators_spec.rb",
|
60
63
|
"spec/spec.opts",
|
61
64
|
"spec/spec_helper.rb"
|
62
65
|
]
|
@@ -67,6 +70,8 @@ Gem::Specification.new do |s|
|
|
67
70
|
s.summary = %q{A delicious Javascript web framework made in Belgium!}
|
68
71
|
s.test_files = [
|
69
72
|
"spec/choco_spec.rb",
|
73
|
+
"spec/dependency_manager_spec.rb",
|
74
|
+
"spec/generators_spec.rb",
|
70
75
|
"spec/spec_helper.rb"
|
71
76
|
]
|
72
77
|
|
data/lib/choco.rb
CHANGED
@@ -73,7 +73,7 @@ module Choco
|
|
73
73
|
file = extract_filename(filename)
|
74
74
|
application_controller = ""
|
75
75
|
File.new('app/controllers/application_controller.js', "r").each do |line|
|
76
|
-
application_controller << line unless line.include?(
|
76
|
+
application_controller << line unless line.include?(file)
|
77
77
|
end
|
78
78
|
|
79
79
|
File.open('app/controllers/application_controller.js', "wb") { |io| io.print application_controller }
|
@@ -29,10 +29,7 @@ module Choco
|
|
29
29
|
|
30
30
|
def create_lib_folder
|
31
31
|
empty_directory "#{name}/lib"
|
32
|
-
|
33
|
-
|
34
|
-
def create_compressed_folder
|
35
|
-
empty_directory "#{name}/compressed"
|
32
|
+
template("templates/lib/application.js", "#{name}/lib/application.js")
|
36
33
|
end
|
37
34
|
|
38
35
|
def create_images_folder
|
@@ -10,11 +10,11 @@ module Choco
|
|
10
10
|
argument :name
|
11
11
|
|
12
12
|
def create_controller_file
|
13
|
-
template('templates/controllers/base_controller.js', "app/controllers/#{name}_controller.js")
|
13
|
+
template('templates/controllers/base_controller.js', "app/controllers/#{name.underscore}_controller.js")
|
14
14
|
end
|
15
15
|
|
16
16
|
def create_views_folder
|
17
|
-
empty_directory "app/views/#{name}"
|
17
|
+
empty_directory "app/views/#{name.underscore}"
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<h1>Edit a <%= @model %></h1>
|
2
2
|
<form action="#/<%= @route_path %>/update/<%%= <%= @model %>.id() %>" method="put">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
<% @keys.each do |key| -%>
|
4
|
+
<% if key != 'id' -%>
|
5
|
+
<p>
|
6
|
+
<label><%= key.camelcase %></label><br/>
|
7
|
+
<input type="text" name="<%= @model %>[<%= key %>]" value="<%%= <%= @model %>.attr('<%= key %>') %>"/>
|
8
|
+
</p>
|
9
|
+
<% end -%>
|
10
|
+
<% end -%>
|
11
11
|
<p>
|
12
12
|
<input type="submit" value="Update" />
|
13
13
|
</p>
|
@@ -6,22 +6,22 @@
|
|
6
6
|
|
7
7
|
<table>
|
8
8
|
<thead>
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
<% @keys.each do |key| -%>
|
10
|
+
<th><%= key.camelcase %></th>
|
11
|
+
<% end -%>
|
12
12
|
<th>Actions</th>
|
13
13
|
</thead>
|
14
14
|
<tbody>
|
15
15
|
<%% $.each(<%= @model.pluralize %>, function(i, <%= @model %>) { %>
|
16
16
|
<tr id="<%= @model %>_<%%= <%= @model %>.id() %>">
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
<% @keys.each do |key| -%>
|
18
|
+
<td><%%= <%= @model %>.attr('<%= key %>') %></td>
|
19
|
+
<% end -%>
|
20
|
+
<td>
|
21
|
+
<a href="#/<%= @route_path %>/<%%= <%= @model %>.id() %>">Permalink</a>
|
22
|
+
<a href="#/<%= @route_path %>/edit/<%%= <%= @model %>.id() %>">Edit</a>
|
23
|
+
<a href="#/<%= @route_path %>/<%%= <%= @model %>.id() %>" verb="delete" confirm="Are you sure?">Delete</a>
|
24
|
+
</td>
|
25
25
|
</tr>
|
26
26
|
<%% }); %>
|
27
27
|
</tbody>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<h1>Add a new <%= @model %></h1>
|
2
2
|
<form action="#/<%= @route_path %>" method="post">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
<% @keys.each do |key| -%>
|
4
|
+
<% if key != 'id' -%>
|
5
|
+
<p>
|
6
|
+
<label><%= key.camelcase %></label><br/>
|
7
|
+
<input type="text" name="<%= @model %>[<%= key %>]"/>
|
8
|
+
</p>
|
9
|
+
<% end -%>
|
10
|
+
<% end -%>
|
11
11
|
<p>
|
12
12
|
<input type="submit" value="Add" />
|
13
13
|
</p>
|
@@ -1,10 +1,10 @@
|
|
1
|
-
<% @keys.each do |key|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<% end
|
1
|
+
<% @keys.each do |key| -%>
|
2
|
+
<p>
|
3
|
+
<label><%= key.camelcase %></label>
|
4
|
+
<br/>
|
5
|
+
<%%= <%= @model %>.attr('<%= key %>') %>
|
6
|
+
</p>
|
7
|
+
<% end -%>
|
8
8
|
<br/>
|
9
9
|
<br/>
|
10
10
|
<a href="#/<%= @route_path %>">Back to index</a>
|
data/spec/choco_spec.rb
CHANGED
@@ -0,0 +1,106 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Choco::DependencyManager do
|
4
|
+
|
5
|
+
def in_file(file, dependency, after = '')
|
6
|
+
i = 0
|
7
|
+
after_after = false
|
8
|
+
|
9
|
+
File.new(file, "r").each do |line|
|
10
|
+
after_after = true if line.include?(after)
|
11
|
+
if after != ''
|
12
|
+
i += 1 if after_after && line.include?(dependency)
|
13
|
+
else
|
14
|
+
i += 1 if line.include?(dependency)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
i
|
18
|
+
end
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
@project_path = 'spec/tmp/test_project'
|
22
|
+
Choco::AppGenerator.start @project_path
|
23
|
+
FileUtils.cd(@project_path)
|
24
|
+
end
|
25
|
+
|
26
|
+
after(:each) do
|
27
|
+
FileUtils.cd('../../..')
|
28
|
+
FileUtils.rm_rf(@project_path)
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "adding dependencies" do
|
32
|
+
|
33
|
+
describe "when it's a controller" do
|
34
|
+
|
35
|
+
it "should add an entry in the Jimfile (controllers section)" do
|
36
|
+
in_file('Jimfile', 'app/controllers/posts_controller').should == 0
|
37
|
+
Choco::DependencyManager.add_dependency('app/controllers/posts_controller.js')
|
38
|
+
in_file('Jimfile', 'app/controllers/posts_controller', "// Controllers # Don't remove this line!").should == 1
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should configure it in the application controller" do
|
42
|
+
in_file('app/controllers/application_controller.js', 'ArticlesController(this);').should == 0
|
43
|
+
Choco::DependencyManager.add_dependency('app/controllers/articles_controller.js')
|
44
|
+
in_file('app/controllers/application_controller.js',
|
45
|
+
'ArticlesController(this);',
|
46
|
+
"/* Configure your controllers here ### Don't remove this line! */").should == 1
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "when it's a model" do
|
52
|
+
|
53
|
+
it "should add an entry in the Jimfile (models section)" do
|
54
|
+
in_file('Jimfile', 'app/models/post').should == 0
|
55
|
+
Choco::DependencyManager.add_dependency('app/models/post.js')
|
56
|
+
in_file('Jimfile', 'app/models/post', "// Models # Don't remove this line!").should == 1
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "when it's a helper" do
|
62
|
+
|
63
|
+
it "should add an entry in the Jimfile (helpers section)" do
|
64
|
+
in_file('Jimfile', 'app/helpers/test').should == 0
|
65
|
+
Choco::DependencyManager.add_dependency('app/helpers/test.js')
|
66
|
+
in_file('Jimfile', 'app/helpers/test', "// Helpers # Don't remove this line!").should == 1
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "when it's a lib" do
|
72
|
+
|
73
|
+
it "should add an entry in the Jimfile (libs section)" do
|
74
|
+
in_file('Jimfile', 'lib/my_lib').should == 0
|
75
|
+
Choco::DependencyManager.add_dependency('lib/my_lib.js')
|
76
|
+
in_file('Jimfile', 'lib/my_lib', "// Libs # Don't remove this line!").should == 1
|
77
|
+
|
78
|
+
in_file('Jimfile', 'another/file').should == 0
|
79
|
+
Choco::DependencyManager.add_dependency('another/file.js')
|
80
|
+
in_file('Jimfile', 'another/file', "// Libs # Don't remove this line!").should == 1
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "removing dependencies" do
|
88
|
+
|
89
|
+
it "should remove the dependency from the jimfile" do
|
90
|
+
Choco::DependencyManager.add_dependency('app/models/post.js')
|
91
|
+
in_file('Jimfile', 'app/models/post').should == 1
|
92
|
+
Choco::DependencyManager.remove_dependency('app/models/post.js')
|
93
|
+
in_file('Jimfile', 'app/models/post').should == 0
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "when it's a controller" do
|
97
|
+
it "should remove the configuration from the application controller" do
|
98
|
+
Choco::DependencyManager.add_dependency('app/controllers/articles_controller.js')
|
99
|
+
in_file('app/controllers/application_controller.js', 'ArticlesController(this);').should == 1
|
100
|
+
Choco::DependencyManager.remove_dependency('app/controllers/articles_controller.js')
|
101
|
+
in_file('app/controllers/application_controller.js', 'ArticlesController(this);').should == 0
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,300 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "Generators" do
|
4
|
+
|
5
|
+
describe Choco::AppGenerator do
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
@project_path = 'spec/tmp/test_project'
|
9
|
+
Choco::AppGenerator.start @project_path
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:all) do
|
13
|
+
FileUtils.rm_rf @project_path
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should generate the project folder" do
|
17
|
+
File.exist?(@project_path).should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should generate the app folder" do
|
21
|
+
File.exist?(@project_path + '/app').should be_true
|
22
|
+
File.exist?(@project_path + '/app/controllers').should be_true
|
23
|
+
File.exist?(@project_path + '/app/helpers').should be_true
|
24
|
+
File.exist?(@project_path + '/app/models').should be_true
|
25
|
+
File.exist?(@project_path + '/app/views').should be_true
|
26
|
+
File.exist?(@project_path + '/app/controllers/application_controller.js').should be_true
|
27
|
+
File.exist?(@project_path + '/app/views/main/index.template').should be_true
|
28
|
+
File.exist?(@project_path + '/app/helpers/application_helper.js').should be_true
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should generate the lib folder" do
|
32
|
+
File.exist?(@project_path + '/lib').should be_true
|
33
|
+
File.exist?(@project_path + '/lib/application.js').should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should generate the images folder" do
|
37
|
+
File.exist?(@project_path + '/images').should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should generate the stylesheets folder" do
|
41
|
+
File.exist?(@project_path + '/stylesheets').should be_true
|
42
|
+
File.exist?(@project_path + '/stylesheets/application.css').should be_true
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should generate the spec folder" do
|
46
|
+
File.exist?(@project_path + '/spec').should be_true
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should generate the script folder" do
|
50
|
+
File.exist?(@project_path + '/script').should be_true
|
51
|
+
File.exist?(@project_path + '/script/choco').should be_true
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should generate the main files" do
|
55
|
+
File.exist?(@project_path + '/Jimfile').should be_true
|
56
|
+
File.exist?(@project_path + '/Rakefile').should be_true
|
57
|
+
File.exist?(@project_path + '/README.rdoc').should be_true
|
58
|
+
File.exist?(@project_path + '/index.html').should be_true
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "templates" do
|
62
|
+
|
63
|
+
describe "ApplicationController" do
|
64
|
+
|
65
|
+
it "should set the views path to the project views folder" do
|
66
|
+
file = get_file_as_string(@project_path + '/app/controllers/application_controller.js')
|
67
|
+
file.include?("this.use(Sammy.SmartRenderer, '/spec/tmp/test_project/app/views/');").should be_true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "index.html" do
|
72
|
+
|
73
|
+
before(:all) do
|
74
|
+
@file = get_file_as_string(@project_path + '/index.html')
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should include the bundled.js file" do
|
78
|
+
@file.include?('<script src="lib/bundled.js" type="text/javascript"></script>').should be_true
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should include the root div" do
|
82
|
+
@file.include?('<div id="choco"></div>').should be_true
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "code generators" do
|
91
|
+
|
92
|
+
before(:all) do
|
93
|
+
@project_path = 'spec/tmp/test_project'
|
94
|
+
Choco::AppGenerator.start @project_path
|
95
|
+
FileUtils.cd(@project_path)
|
96
|
+
end
|
97
|
+
|
98
|
+
after(:all) do
|
99
|
+
FileUtils.cd('..')
|
100
|
+
FileUtils.rm_rf('test_project')
|
101
|
+
FileUtils.cd('../..')
|
102
|
+
end
|
103
|
+
|
104
|
+
describe Choco::ControllerGenerator do
|
105
|
+
|
106
|
+
it "should generate a controller file and a views folder" do
|
107
|
+
Choco::ControllerGenerator.start 'posts'
|
108
|
+
File.exist?('app/controllers/posts_controller.js').should be_true
|
109
|
+
File.exist?('app/views/posts').should be_true
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should not pluralize the controller name" do
|
113
|
+
Choco::ControllerGenerator.start 'singular'
|
114
|
+
File.exist?('app/controllers/singular_controller.js').should be_true
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should underscore the name" do
|
118
|
+
Choco::ControllerGenerator.start 'UnderScore'
|
119
|
+
File.exist?('app/controllers/under_score_controller.js').should be_true
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "templates" do
|
123
|
+
|
124
|
+
before(:all) do
|
125
|
+
Choco::ControllerGenerator.start 'UnderScore'
|
126
|
+
@file = get_file_as_string('app/controllers/under_score_controller.js')
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "the generated controller" do
|
130
|
+
it "should be named correctly" do
|
131
|
+
@file.include?('UnderScoreController').should be_true
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should define an index route" do
|
135
|
+
@file.include?("get('#/under_score'").should be_true
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe Choco::ModelGenerator do
|
142
|
+
it "should generate a model file" do
|
143
|
+
Choco::ModelGenerator.start 'post'
|
144
|
+
File.exist?('app/models/post.js').should be_true
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should generate a model file with a singular name" do
|
148
|
+
Choco::ModelGenerator.start 'posts'
|
149
|
+
File.exist?('app/models/post.js').should be_true
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "templates" do
|
153
|
+
|
154
|
+
describe "the generated model" do
|
155
|
+
|
156
|
+
before(:all) do
|
157
|
+
Choco::ModelGenerator.start 'post'
|
158
|
+
@file = get_file_as_string('app/models/post.js')
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should be named correctly" do
|
162
|
+
@file.include?('var Post = Model("post"').should be_true
|
163
|
+
end
|
164
|
+
|
165
|
+
it "model persistence URL should be correct" do
|
166
|
+
@file.include?('Model.RestPersistence("/posts")').should be_true
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe Choco::LayoutGenerator do
|
174
|
+
it "should generate a layout file" do
|
175
|
+
Choco::LayoutGenerator.start 'main'
|
176
|
+
File.exist?('app/views/layouts/main.js').should be_true
|
177
|
+
end
|
178
|
+
|
179
|
+
describe "templates" do
|
180
|
+
|
181
|
+
it "the layout should be named correctly" do
|
182
|
+
Choco::LayoutGenerator.start 'main'
|
183
|
+
file = get_file_as_string('app/views/layouts/main.js')
|
184
|
+
file.include?('var MainLayout').should be_true
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
describe Choco::PluginGenerator do
|
192
|
+
it "should generate a plugin file" do
|
193
|
+
Choco::PluginGenerator.start 'live'
|
194
|
+
File.exist?('lib/plugin_live.js').should be_true
|
195
|
+
end
|
196
|
+
|
197
|
+
describe "templates" do
|
198
|
+
|
199
|
+
describe "the generated plugin" do
|
200
|
+
|
201
|
+
before(:all) do
|
202
|
+
Choco::PluginGenerator.start 'live'
|
203
|
+
@file = get_file_as_string('lib/plugin_live.js')
|
204
|
+
end
|
205
|
+
|
206
|
+
it "should be named correctly" do
|
207
|
+
@file.include?('var LivePlugin').should be_true
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should apply the js-model plugin" do
|
211
|
+
@file.include?('ChocoUtils.modelPlugin(LivePlugin);').should be_true
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should display the syntax to activate the sammy plugin" do
|
215
|
+
@file.include?('// this.use(Sammy.Live);').should be_true
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
describe Choco::ScaffoldGenerator do
|
224
|
+
describe "with a list of fields" do
|
225
|
+
it "should generate a scaffold based on the list of fields given as argument" do
|
226
|
+
gen = Choco::ScaffoldGenerator.new(['post', ['author', 'title', 'content']])
|
227
|
+
gen.invoke
|
228
|
+
|
229
|
+
File.exist?('app/controllers/posts_controller.js').should be_true
|
230
|
+
File.exist?('app/models/post.js').should be_true
|
231
|
+
File.exist?('app/views/posts/index.template').should be_true
|
232
|
+
File.exist?('app/views/posts/show.template').should be_true
|
233
|
+
File.exist?('app/views/posts/new.template').should be_true
|
234
|
+
File.exist?('app/views/posts/edit.template').should be_true
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
describe "with a URL" do
|
239
|
+
it "should generate a scaffold based on the fields present in the JSON response" do
|
240
|
+
url = 'http://localhost:3000/posts'
|
241
|
+
gen = Choco::ScaffoldGenerator.new(['post', url])
|
242
|
+
json = [{"title" => "Please, contribute!","author" => "antho","content" => "What do you think about Choco?"}]
|
243
|
+
|
244
|
+
gen.should_receive(:open).with(url, 'UserAgent' => 'Choco').and_return(StringIO.new)
|
245
|
+
JSON.should_receive(:parse).and_return(json)
|
246
|
+
|
247
|
+
gen.invoke
|
248
|
+
|
249
|
+
gen.keys.should == ["author", "title", "content"]
|
250
|
+
File.exist?('app/controllers/posts_controller.js').should be_true
|
251
|
+
File.exist?('app/models/post.js').should be_true
|
252
|
+
File.exist?('app/views/posts/index.template').should be_true
|
253
|
+
File.exist?('app/views/posts/show.template').should be_true
|
254
|
+
File.exist?('app/views/posts/new.template').should be_true
|
255
|
+
File.exist?('app/views/posts/edit.template').should be_true
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
describe "templates" do
|
260
|
+
|
261
|
+
before(:each) do
|
262
|
+
gen = Choco::ScaffoldGenerator.new(['post', ['author', 'title', 'content']])
|
263
|
+
gen.invoke
|
264
|
+
end
|
265
|
+
|
266
|
+
it "the index file should have a column for each field" do
|
267
|
+
file = get_file_as_string('app/views/posts/index.template')
|
268
|
+
file.include?("<th>Author</th>").should be_true
|
269
|
+
file.include?("<th>Title</th>").should be_true
|
270
|
+
file.include?("<th>Content</th>").should be_true
|
271
|
+
file.include?("<td><%= post.attr('author') %></td>").should be_true
|
272
|
+
file.include?("<td><%= post.attr('title') %></td>").should be_true
|
273
|
+
file.include?("<td><%= post.attr('content') %></td>").should be_true
|
274
|
+
end
|
275
|
+
|
276
|
+
it "the show file should have a label for each field" do
|
277
|
+
file = get_file_as_string('app/views/posts/show.template')
|
278
|
+
file.include?("<label>Author</label>").should be_true
|
279
|
+
file.include?("<label>Title</label>").should be_true
|
280
|
+
file.include?("<label>Content</label>").should be_true
|
281
|
+
end
|
282
|
+
|
283
|
+
it "the new file should have a field for each field" do
|
284
|
+
file = get_file_as_string('app/views/posts/new.template')
|
285
|
+
file.include?('<input type="text" name="post[author]"/>').should be_true
|
286
|
+
file.include?('<input type="text" name="post[title]"/>').should be_true
|
287
|
+
file.include?('<input type="text" name="post[content]"/>').should be_true
|
288
|
+
end
|
289
|
+
|
290
|
+
it "the edit file should have a field for each field" do
|
291
|
+
file = get_file_as_string('app/views/posts/edit.template')
|
292
|
+
file.include?(%Q(<input type="text" name="post[author]" value="<%= post.attr('author') %>"/>)).should be_true
|
293
|
+
file.include?(%Q(<input type="text" name="post[title]" value="<%= post.attr('title') %>"/>)).should be_true
|
294
|
+
file.include?(%Q(<input type="text" name="post[content]" value="<%= post.attr('content') %>"/>)).should be_true
|
295
|
+
end
|
296
|
+
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'rubygems'
|
3
4
|
require 'choco'
|
4
5
|
require 'spec'
|
5
6
|
require 'spec/autorun'
|
6
7
|
|
8
|
+
def get_file_as_string(filename)
|
9
|
+
data = ''
|
10
|
+
f = File.open(filename, "r")
|
11
|
+
f.each_line { |line| data += line }
|
12
|
+
data
|
13
|
+
end
|
14
|
+
|
7
15
|
Spec::Runner.configure do |config|
|
8
16
|
|
9
17
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Anthony Heukmes
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-07-
|
17
|
+
date: 2010-07-27 00:00:00 +02:00
|
18
18
|
default_executable: choco
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -118,6 +118,7 @@ files:
|
|
118
118
|
- lib/choco/generators/templates/help/generators
|
119
119
|
- lib/choco/generators/templates/helpers/application_helper.js
|
120
120
|
- lib/choco/generators/templates/index.html
|
121
|
+
- lib/choco/generators/templates/lib/application.js
|
121
122
|
- lib/choco/generators/templates/lib/plugin.js
|
122
123
|
- lib/choco/generators/templates/models/base.js
|
123
124
|
- lib/choco/generators/templates/views/edit.template
|
@@ -127,6 +128,8 @@ files:
|
|
127
128
|
- lib/choco/generators/templates/views/new.template
|
128
129
|
- lib/choco/generators/templates/views/show.template
|
129
130
|
- spec/choco_spec.rb
|
131
|
+
- spec/dependency_manager_spec.rb
|
132
|
+
- spec/generators_spec.rb
|
130
133
|
- spec/spec.opts
|
131
134
|
- spec/spec_helper.rb
|
132
135
|
has_rdoc: true
|
@@ -161,4 +164,6 @@ specification_version: 3
|
|
161
164
|
summary: A delicious Javascript web framework made in Belgium!
|
162
165
|
test_files:
|
163
166
|
- spec/choco_spec.rb
|
167
|
+
- spec/dependency_manager_spec.rb
|
168
|
+
- spec/generators_spec.rb
|
164
169
|
- spec/spec_helper.rb
|