choco 0.1.0

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 (41) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/HISTORY +3 -0
  4. data/LICENSE +20 -0
  5. data/README.rdoc +326 -0
  6. data/Rakefile +55 -0
  7. data/bin/choco +45 -0
  8. data/choco.gemspec +98 -0
  9. data/lib/choco.rb +16 -0
  10. data/lib/choco/cli.rb +75 -0
  11. data/lib/choco/dependency_manager.rb +92 -0
  12. data/lib/choco/generators/app_generator.rb +72 -0
  13. data/lib/choco/generators/controller_generator.rb +21 -0
  14. data/lib/choco/generators/layout_generator.rb +19 -0
  15. data/lib/choco/generators/model_generator.rb +20 -0
  16. data/lib/choco/generators/plugin_generator.rb +20 -0
  17. data/lib/choco/generators/scaffold_generator.rb +65 -0
  18. data/lib/choco/generators/templates/Jimfile +24 -0
  19. data/lib/choco/generators/templates/README.rdoc +3 -0
  20. data/lib/choco/generators/templates/Rakefile +25 -0
  21. data/lib/choco/generators/templates/application.css +1 -0
  22. data/lib/choco/generators/templates/choco +7 -0
  23. data/lib/choco/generators/templates/controllers/application_controller.js +33 -0
  24. data/lib/choco/generators/templates/controllers/base_controller.js +6 -0
  25. data/lib/choco/generators/templates/controllers/rest_controller.js +53 -0
  26. data/lib/choco/generators/templates/help/commands +12 -0
  27. data/lib/choco/generators/templates/help/generators +33 -0
  28. data/lib/choco/generators/templates/helpers/application_helper.js +7 -0
  29. data/lib/choco/generators/templates/index.html +16 -0
  30. data/lib/choco/generators/templates/lib/plugin.js +40 -0
  31. data/lib/choco/generators/templates/models/base.js +7 -0
  32. data/lib/choco/generators/templates/views/edit.template +14 -0
  33. data/lib/choco/generators/templates/views/index.template +32 -0
  34. data/lib/choco/generators/templates/views/layout.js +4 -0
  35. data/lib/choco/generators/templates/views/main/index.template +1 -0
  36. data/lib/choco/generators/templates/views/new.template +14 -0
  37. data/lib/choco/generators/templates/views/show.template +10 -0
  38. data/spec/choco_spec.rb +7 -0
  39. data/spec/spec.opts +1 -0
  40. data/spec/spec_helper.rb +9 -0
  41. metadata +164 -0
@@ -0,0 +1,24 @@
1
+ // Your Jimfile lists your JS dependencies
2
+ // Launch $ choco --watch at the root of your project
3
+ // This file and lib/bundled.js will be maintained for you!
4
+
5
+ jquery
6
+ sammy
7
+ sammy.template
8
+ sammy.nested_params
9
+ sammy.smart_renderer
10
+ js-model 0.8.3
11
+ underscore
12
+ mustache
13
+ choco.utils
14
+ choco.plugins.models.load
15
+
16
+ // Libs # Don't remove this line!
17
+
18
+ // Helpers # Don't remove this line!
19
+ app/helpers/application_helper
20
+
21
+ // Models # Don't remove this line!
22
+
23
+ // Controllers # Don't remove this line!
24
+ app/controllers/application_controller
@@ -0,0 +1,3 @@
1
+ == Welcome to Choco
2
+
3
+ A delicious Javascript web framework made in Belgium!
@@ -0,0 +1,25 @@
1
+ require 'rake'
2
+
3
+ namespace :choco do
4
+
5
+ namespace :js do
6
+
7
+ desc "Install Javascript dependencies"
8
+ task :install do
9
+ system 'jim install http://code.jquery.com/jquery-1.4.2.js'
10
+ system 'jim install http://github.com/quirkey/sammy/zipball/v0.5.4'
11
+ system 'jim install http://github.com/benpickles/js-model/zipball/v0.8.4'
12
+ system 'jim install http://documentcloud.github.com/underscore/underscore.js'
13
+ system 'jim install http://github.com/janl/mustache.js/zipball/0.2.3'
14
+ system 'jim install http://github.com/ahe/choco.libs/raw/master/choco.utils.js'
15
+ system 'jim install http://github.com/ahe/choco.libs/raw/master/plugins/models/choco.plugins.models.load.js'
16
+ system 'jim install http://github.com/ahe/choco.libs/raw/master/plugins/sammy/choco.plugins.sammy.smart_renderer.js'
17
+ system 'jim bundle lib/bundled.js'
18
+ end
19
+ end
20
+
21
+ desc "Compress all your JS files into lib/compressed.js"
22
+ task :deploy do
23
+ system 'jim compress lib/compressed.js'
24
+ end
25
+ end
@@ -0,0 +1 @@
1
+ @import url(http://yui.yahooapis.com/3.0.0/build/cssreset/reset-min.css);
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'choco'
5
+
6
+ cli = Choco::CLI.new(ARGV)
7
+ puts cli.run
@@ -0,0 +1,33 @@
1
+ var app = $.sammy(function() {
2
+
3
+ this.element_selector = '#choco';
4
+ this.template_engine = 'template';
5
+
6
+ // Configure your Sammy JS plugins
7
+ this.use(Sammy.Template);
8
+ this.use(Sammy.NestedParams);
9
+ this.use(Sammy.SmartRenderer, '/<%= name %>/app/views/');
10
+
11
+ // Event fired by the render() method
12
+ this.bind('template_loaded', function(e, data) {
13
+ ChocoUtils.activateDeleteLinks(app);
14
+ });
15
+
16
+ // Root page
17
+ this.get('#/main', function(cx) {
18
+ });
19
+
20
+ /* Configure your helpers here */
21
+ this.helpers(ApplicationHelper);
22
+
23
+ /* Configure your controllers here ### Don't remove this line! */
24
+ // PostsController(this);
25
+ });
26
+
27
+ $(function() {
28
+ // Load your models here, example : var models = [Post, Category]
29
+ var models = [];
30
+ ChocoUtils.loadModels(models, function() {
31
+ app.run('#/main');
32
+ });
33
+ });
@@ -0,0 +1,6 @@
1
+ <%= name.camelcase %>Controller = function(app) { with(app) {
2
+
3
+ get('#/<%= name.underscore %>', function(cx) {
4
+ });
5
+
6
+ }};
@@ -0,0 +1,53 @@
1
+ <%= @controller_name %>Controller = function(app) { with(app) {
2
+
3
+ /** Routes **/
4
+
5
+ // GET index
6
+ get('#/<%= @route_path %>', function(cx) {
7
+ cx.<%= @model.pluralize %> = <%= @model_name %>.all();
8
+ });
9
+
10
+ // GET new
11
+ get('#/<%= @route_path %>/new', function(cx) {
12
+ });
13
+
14
+ // POST create
15
+ post('#/<%= @route_path %>', function(cx) {
16
+ var <%= @model %> = new <%= @model_name %>(cx.params['<%= @model %>']);
17
+ <%= @model %>.save(function(success) {
18
+ cx.redirect('#/<%= @route_path %>/' + <%= @model %>.id());
19
+ });
20
+ });
21
+
22
+ // GET edit
23
+ get('#/<%= @route_path %>/edit/:id', function(cx) {
24
+ cx.<%= @model %> = <%= @model_name %>.find(cx.params['id']);
25
+ });
26
+
27
+ // PUT update
28
+ put('#/<%= @route_path %>/update/:id', function(cx) {
29
+ var <%= @model %> = <%= @model_name %>.find(cx.params['id']);
30
+ <%= @model %>.update(cx.params['<%= @model %>']).save(function(success) {
31
+ cx.redirect('#/<%= @route_path %>/' + <%= @model %>.id())
32
+ });
33
+ });
34
+
35
+ // DELETE destroy
36
+ route('delete', '#/<%= @route_path %>/:id', function(cx) {
37
+ var <%= @model %> = <%= @model_name %>.find(cx.params['id']);
38
+ <%= @model %>.destroy();
39
+ cx.trigger('<%= @model %>_remove', { <%= @model %>_id: <%= @model %>.id() });
40
+ });
41
+
42
+ // GET show
43
+ get('#/<%= @route_path %>/:id', function(cx) {
44
+ cx.<%= @model %> = <%= @model_name %>.find(cx.params['id']);
45
+ });
46
+
47
+ /** Events **/
48
+
49
+ bind('<%= @model %>_remove', function(e, data) {
50
+ $('#<%= @model %>_' + data['<%= @model %>_id']).remove();
51
+ });
52
+
53
+ }};
@@ -0,0 +1,12 @@
1
+
2
+ The choco script responds to the following commands and options :
3
+
4
+ --watch
5
+ The Choco watch command will track JS files in your project (create, update, remove).
6
+ It will regenerate your bundled.js at every modification in one of your JS files.
7
+ Your Jimfile will also be maintained by this command.
8
+
9
+ generate <generator_name> <resource_name> [options]
10
+ Available generators are : controller, model, scaffold, layout, plugin
11
+ Run '$ choco generate', for more information.
12
+
@@ -0,0 +1,33 @@
1
+
2
+ The following Choco generators are available :
3
+
4
+ controller
5
+ $ choco generate controller <controller_name>
6
+
7
+ It will create the controller file and a views folder.
8
+
9
+ model
10
+ $ choco generate model <model_name>
11
+
12
+ It will create the model file.
13
+
14
+ scaffold
15
+ $ choco generate scaffold <resource_name> [field1 field2 ...]
16
+
17
+ It will create a RESTful controller, the model and the views.
18
+
19
+ scaffold <url>
20
+ $ choco generate scaffold <resource_name> <url>
21
+
22
+ It will create a RESTful controller, the model and the views.
23
+ The fields will be determined from the JSON returned by your URL
24
+ e.g : http://localhost:3000/posts.json
25
+
26
+ layout
27
+ $ choco generate layout <layout_name>
28
+
29
+ It will create the layout file.
30
+
31
+ plugin
32
+ $ choco generate plugin <plugin_name>
33
+
@@ -0,0 +1,7 @@
1
+ // Helpers are available in your controllers and your views
2
+
3
+ var ApplicationHelper = {
4
+ helloWorld: function() {
5
+ alert("Hello World!");
6
+ }
7
+ }
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta content='' name='keywords' />
5
+ <meta content='' name='description' />
6
+ <meta content='text/html; charset=utf-8' http-equiv='Content-type' />
7
+ <link href="stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" />
8
+ <script src="lib/bundled.js" type="text/javascript"></script>
9
+ <!--[if lt IE 9]>
10
+ <script src='http://html5shiv.googlecode.com/svn/trunk/html5.js' type='text/javascript'></script>
11
+ <![endif]-->
12
+ </head>
13
+ <body>
14
+ <div id="choco"></div>
15
+ </body>
16
+ </html>
@@ -0,0 +1,40 @@
1
+ // js-model plugin
2
+ // It allows you to add methods to all your models.
3
+
4
+ var <%= @plugin_name %>Plugin = {
5
+ modelsClassMethods : {
6
+ myhelper: function() {
7
+ alert('hello world [class method]');
8
+ }
9
+ },
10
+
11
+ modelsInstanceMethods : {
12
+ myhelper: function() {
13
+ alert('hello world [instance method]');
14
+ }
15
+ }
16
+ };
17
+
18
+ // Apply the js-model plugin
19
+ ChocoUtils.modelPlugin(<%= @plugin_name %>Plugin);
20
+
21
+
22
+ // Sammy plugin
23
+ // It allows you to add helper methods to your controllers and your views.
24
+
25
+ (function($) {
26
+
27
+ Sammy = Sammy || {};
28
+
29
+ Sammy.<%= @plugin_name %> = function() {
30
+
31
+ this.helper('<%= @plugin_name.underscore %>', function() {
32
+ alert('hello world [sammy plugin]');
33
+ });
34
+
35
+ };
36
+
37
+ })(jQuery);
38
+
39
+ // Add this line to your application_controller.js to use this plugin :
40
+ // this.use(Sammy.<%= @plugin_name %>);
@@ -0,0 +1,7 @@
1
+ var <%= @model_name %> = Model("<%= @model %>", {
2
+ persistence: Model.RestPersistence("/<%= @route_path %>"),
3
+
4
+ // Class methods
5
+ }, {
6
+ // Instance methods
7
+ });
@@ -0,0 +1,14 @@
1
+ <h1>Edit a <%= @model %></h1>
2
+ <form action="#/<%= @route_path %>/update/<%%= <%= @model %>.id() %>" method="put">
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
+ <p>
12
+ <input type="submit" value="Update" />
13
+ </p>
14
+ </form>
@@ -0,0 +1,32 @@
1
+ <h1>Listing <%= @model.pluralize %></h1>
2
+
3
+ <%% if(_.isEmpty(<%= @model.pluralize %>)) { %>
4
+ Sorry, we don't have any <%= @model %> yet!
5
+ <%% } %>
6
+
7
+ <table>
8
+ <thead>
9
+ <% @keys.each do |key| %>
10
+ <th><%= key.camelcase %></th>
11
+ <% end %>
12
+ <th>Actions</th>
13
+ </thead>
14
+ <tbody>
15
+ <%% $.each(<%= @model.pluralize %>, function(i, <%= @model %>) { %>
16
+ <tr id="<%= @model %>_<%%= <%= @model %>.id() %>">
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
+ </tr>
26
+ <%% }); %>
27
+ </tbody>
28
+ </table>
29
+
30
+ <br/>
31
+ <br/>
32
+ <a href="#/<%= @route_path %>/new">Add a new <%= @model %></a>
@@ -0,0 +1,4 @@
1
+ var <%= @layout_name %>Layout =
2
+ '<div id="<%= @name %>"> \
3
+ {{content}} \
4
+ </div>';
@@ -0,0 +1,14 @@
1
+ <h1>Add a new <%= @model %></h1>
2
+ <form action="#/<%= @route_path %>" method="post">
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
+ <p>
12
+ <input type="submit" value="Add" />
13
+ </p>
14
+ </form>
@@ -0,0 +1,10 @@
1
+ <% @keys.each do |key| %>
2
+ <p>
3
+ <label><%= key.camelcase %></label>
4
+ <br/>
5
+ <%%= <%= @model %>.attr('<%= key %>') %>
6
+ </p>
7
+ <% end %>
8
+ <br/>
9
+ <br/>
10
+ <a href="#/<%= @route_path %>">Back to index</a>
@@ -0,0 +1,7 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Choco" do
4
+ it "fails" do
5
+ fail "hey buddy, you should probably rename this file and start specing for real"
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'choco'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: choco
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Anthony Heukmes
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-07-23 00:00:00 +02:00
18
+ default_executable: choco
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: jim
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: fssm
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :runtime
43
+ version_requirements: *id002
44
+ - !ruby/object:Gem::Dependency
45
+ name: thor
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ type: :runtime
55
+ version_requirements: *id003
56
+ - !ruby/object:Gem::Dependency
57
+ name: activesupport
58
+ prerelease: false
59
+ requirement: &id004 !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ type: :runtime
67
+ version_requirements: *id004
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec
70
+ prerelease: false
71
+ requirement: &id005 !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ segments:
76
+ - 1
77
+ - 2
78
+ - 9
79
+ version: 1.2.9
80
+ type: :development
81
+ version_requirements: *id005
82
+ description: Choco brings the MVC to the client side! It allows you to easily develop maintainable Rich Internet Applications using Javascript.
83
+ email: anthony.heukmes@skynet.be
84
+ executables:
85
+ - choco
86
+ extensions: []
87
+
88
+ extra_rdoc_files:
89
+ - LICENSE
90
+ - README.rdoc
91
+ files:
92
+ - .document
93
+ - .gitignore
94
+ - HISTORY
95
+ - LICENSE
96
+ - README.rdoc
97
+ - Rakefile
98
+ - bin/choco
99
+ - choco.gemspec
100
+ - lib/choco.rb
101
+ - lib/choco/cli.rb
102
+ - lib/choco/dependency_manager.rb
103
+ - lib/choco/generators/app_generator.rb
104
+ - lib/choco/generators/controller_generator.rb
105
+ - lib/choco/generators/layout_generator.rb
106
+ - lib/choco/generators/model_generator.rb
107
+ - lib/choco/generators/plugin_generator.rb
108
+ - lib/choco/generators/scaffold_generator.rb
109
+ - lib/choco/generators/templates/Jimfile
110
+ - lib/choco/generators/templates/README.rdoc
111
+ - lib/choco/generators/templates/Rakefile
112
+ - lib/choco/generators/templates/application.css
113
+ - lib/choco/generators/templates/choco
114
+ - lib/choco/generators/templates/controllers/application_controller.js
115
+ - lib/choco/generators/templates/controllers/base_controller.js
116
+ - lib/choco/generators/templates/controllers/rest_controller.js
117
+ - lib/choco/generators/templates/help/commands
118
+ - lib/choco/generators/templates/help/generators
119
+ - lib/choco/generators/templates/helpers/application_helper.js
120
+ - lib/choco/generators/templates/index.html
121
+ - lib/choco/generators/templates/lib/plugin.js
122
+ - lib/choco/generators/templates/models/base.js
123
+ - lib/choco/generators/templates/views/edit.template
124
+ - lib/choco/generators/templates/views/index.template
125
+ - lib/choco/generators/templates/views/layout.js
126
+ - lib/choco/generators/templates/views/main/index.template
127
+ - lib/choco/generators/templates/views/new.template
128
+ - lib/choco/generators/templates/views/show.template
129
+ - spec/choco_spec.rb
130
+ - spec/spec.opts
131
+ - spec/spec_helper.rb
132
+ has_rdoc: true
133
+ homepage: http://github.com/ahe/choco
134
+ licenses: []
135
+
136
+ post_install_message:
137
+ rdoc_options:
138
+ - --charset=UTF-8
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ segments:
146
+ - 0
147
+ version: "0"
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ segments:
153
+ - 0
154
+ version: "0"
155
+ requirements: []
156
+
157
+ rubyforge_project:
158
+ rubygems_version: 1.3.6
159
+ signing_key:
160
+ specification_version: 3
161
+ summary: A delicious Javascript web framework made in Belgium!
162
+ test_files:
163
+ - spec/choco_spec.rb
164
+ - spec/spec_helper.rb