lumbar 0.0.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.
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in lumbar.gemspec
4
+ gemspec
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,5 @@
1
+ # Lumbar
2
+
3
+ Lumbar supports building [Backbone.js][] applications.
4
+
5
+ [Backbone.js]: http://documentcloud.github.com/backbone/
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- mode: ruby -*-
3
+
4
+ require 'lumbar/runner'
5
+ $thor_runner = true
6
+ Lumbar::Runner.start
@@ -0,0 +1,3 @@
1
+ module Lumbar
2
+ # Your code goes here...
3
+ end
@@ -0,0 +1,17 @@
1
+ require 'thor'
2
+ require 'lumbar/tasks'
3
+
4
+ module Lumbar
5
+
6
+ class Runner < Lumbar::Tasks
7
+
8
+ private
9
+ def self.banner(task, all = false, subcommand = false)
10
+ "lumbar " + task.formatted_usage(self, all, subcommand)
11
+ end
12
+ def self.exit_on_failure?
13
+ true
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,309 @@
1
+ require 'thor'
2
+
3
+ module Lumbar
4
+
5
+ class Tasks < Thor
6
+
7
+ include Thor::Actions
8
+ require 'fileutils'
9
+ require 'open-uri'
10
+ require 'active_support/inflector'
11
+
12
+ desc "new [TYPE] [NAME]", "Creates new backbone files or projects, use 'backbone:new help' for more."
13
+ def new(type=nil, name=nil)
14
+ type = type.nil? ? 'help' : type.downcase
15
+ if name.nil? and type != 'help'
16
+ unless type == 'project' or in_app?
17
+ say "You need to be in a project directory to run this command."
18
+ exit 0
19
+ end
20
+ name = ask "#{type.capitalize} name:"
21
+ end
22
+ case type
23
+
24
+ when 'project'
25
+ say "Creating project #{name}:"
26
+ create_project name
27
+
28
+ when 'controller'
29
+ say "Creating controller #{name}:"
30
+ build_controller name
31
+
32
+ when 'model'
33
+ say "Creating model #{name}:"
34
+ build_model name
35
+
36
+ when 'view'
37
+ say "Creating view #{name}:"
38
+ build_view name
39
+
40
+ else
41
+ say <<-EOS
42
+ Usage:
43
+ lumbar new TYPE NAME
44
+
45
+ Types:
46
+ - project
47
+ - controller
48
+ - model (creates a collection too)
49
+ - view
50
+ EOS
51
+
52
+ end
53
+ say "Done."
54
+ end
55
+
56
+ desc "update", "Updates app_scripts"
57
+ def update(type='scripts')
58
+ #TODO: Support type=libs -- pull latest libraries
59
+ if in_app?
60
+ say "Updating app_scripts:"
61
+ update_scripts
62
+
63
+ else
64
+ say "You need to be in a project directory to run this command."
65
+ exit 0
66
+ end
67
+ end
68
+
69
+ desc "serve", "Serves this directory via WebBrick (since some browser don't handle file:// urls well)"
70
+ method_options :port=>5000
71
+ def serve
72
+ require 'webrick'
73
+ say "Launching server at 127.0.0.1:#{options.port}"
74
+ server = WEBrick::HTTPServer.new(
75
+ :Port => options.port,
76
+ :FancyIndexing => true,
77
+ :DocumentRoot => '.',
78
+ :MimeTypes => {
79
+ 'js' => 'text/plain',
80
+ 'coffee' => 'text/plain',
81
+ 'css' => 'text/plain',
82
+ 'less' => 'text/plain',
83
+ 'thor' => 'text/plain',
84
+ 'html' => 'text/html'
85
+ }
86
+ )
87
+ trap('INT') { server.stop }
88
+ server.start
89
+ end
90
+
91
+ no_tasks do
92
+
93
+ def update_scripts(project_name=".")
94
+ File.open "#{project_name}/app/app_scripts.js", 'w' do |file|
95
+ template = ERB.new APP_SCRIPTS_TEMPLATE
96
+ app_scripts = []
97
+ %w(controllers models views).each do |type|
98
+ app_scripts << Dir["#{project_name}/app/#{type}/*.js"]
99
+ end
100
+ app_scripts.flatten!
101
+ file.write template.result( binding )
102
+ say " - #{project_name}/app/app_scripts.js"
103
+ end
104
+ end
105
+
106
+ def build_controller(name)
107
+ require 'erb'
108
+ FileUtils.mkdir_p './app/controllers'
109
+ File.open "./app/controllers/#{name.underscore}.js", 'w' do |file|
110
+ template = ERB.new CONTROLLER_TEMPLATE
111
+ name = name
112
+ className = name.underscore.classify
113
+ file.write template.result( binding )
114
+ say " - ./app/controllers/#{name.underscore}.js"
115
+ update_scripts
116
+ end
117
+ end
118
+
119
+ def build_model(name)
120
+ require 'erb'
121
+ FileUtils.mkdir_p './app/models'
122
+ File.open "./app/models/#{name.underscore}.js", 'w' do |file|
123
+ template = ERB.new MODEL_TEMPLATE
124
+ name = name
125
+ className = name.underscore.classify
126
+ file.write template.result( binding )
127
+ say " - ./app/models/#{name.underscore}.js"
128
+ update_scripts
129
+ end
130
+ end
131
+
132
+ def build_view(name)
133
+ require 'erb'
134
+ FileUtils.mkdir_p './app/views'
135
+ File.open "./app/views/#{name.underscore}.js", 'w' do |file|
136
+ template = ERB.new VIEW_TEMPLATE
137
+ name = name
138
+ className = name.underscore.classify
139
+ file.write template.result( binding )
140
+ say " - ./app/views/#{name.underscore}.js"
141
+ update_scripts
142
+ end
143
+ end
144
+
145
+ def create_project(app_name="NewProject", libs=%w(head jquery underscore backbone))
146
+ require 'erb'
147
+ FileUtils.mkdir_p "./#{app_name}/app/lib"
148
+
149
+ libs.each do |lib|
150
+ File.open "./#{app_name}/app/lib/#{lib}.js", 'w' do |file|
151
+ file.write get_latest(lib)
152
+ say " - #{app_name}/app/lib/#{lib}.js"
153
+ end
154
+ end
155
+
156
+ File.open "./#{app_name}/app/app_main.js", 'w' do |file|
157
+ file.write APP_JS_TEMPLATE
158
+ say " - #{app_name}/app/app_main.js"
159
+ end
160
+
161
+ File.open "./#{app_name}/index.html", 'w' do |file|
162
+ template = ERB.new INDEX_HTML_TEMPLATE
163
+ app_name = app_name
164
+ app_libs = libs.reject {|lib| lib == 'head' }
165
+ file.write template.result( binding )
166
+ say " - #{app_name}/index.html"
167
+ end
168
+
169
+ File.open "./#{app_name}/lumbar.thor", 'w' do |file|
170
+ file.write RAKEFILE_TEMPLATE
171
+ say " - #{app_name}/Rakefile"
172
+ end
173
+
174
+ update_scripts "./#{app_name}"
175
+
176
+ end
177
+
178
+ def get_latest(scriptname)
179
+ # TODO: Verify scriptname is actually in JS_LIBS
180
+ open( JS_LIBS[scriptname] ).read
181
+ end
182
+
183
+ def in_app?
184
+ File.exists?('./app') && File.directory?('./app')
185
+ end
186
+ end
187
+
188
+ APP_JS_TEMPLATE =<<-EOS
189
+
190
+ // You can push your own app_scripts here, example:
191
+ // app_scripts.push('app/lib/my_plugin');
192
+
193
+ function app_main(DEBUG) {
194
+ if (app_scripts.length > 0) {
195
+ head.js.apply(head, app_scripts);
196
+ }
197
+ head.ready(function(){
198
+ // Initialize your application here.
199
+ // new App();
200
+ // Then:
201
+ Backbone.history.start();
202
+ });
203
+ };
204
+
205
+ EOS
206
+
207
+ APP_SCRIPTS_TEMPLATE =<<-EOS
208
+ // auto-generated... Add your scripts in app_main.js
209
+ var app_scripts = [];
210
+ <% app_scripts.each do |script| %>
211
+ app_scripts.push('<%= script %>');<% end %>
212
+ EOS
213
+
214
+ INDEX_HTML_TEMPLATE =<<-EOS
215
+ <!DOCTYPE html>
216
+ <html>
217
+ <head>
218
+ <meta charset="utf-8" />
219
+ <title><%= app_name %></title>
220
+ <!-- Created by Matt McCray on <%= Time.now %> -->
221
+ <script src="app/lib/head.js"></script>
222
+ <script>
223
+ var DEBUG = (window.location.href.indexOf('file:') == 0), app_main_src = 'app/app_main.js'+ (DEBUG ? '?'+((new Date).getTime()) : '');
224
+ head.js("app/lib/<%= app_libs.join '.js", "app/lib/' %>.js", "app/app_scripts.js", app_main_src, function(){ app_main(DEBUG); });
225
+ </script>
226
+ </head>
227
+ <body>
228
+ <header></header>
229
+ <nav></nav>
230
+ <article>
231
+ <section></section>
232
+ </article>
233
+ <aside></aside>
234
+ <footer></footer>
235
+ </body>
236
+ </html>
237
+ EOS
238
+
239
+ CONTROLLER_TEMPLATE = <<-EOS
240
+
241
+ var <%= className %> = Backbone.Controller.extend({
242
+
243
+ routes: {
244
+ '': 'index'
245
+ },
246
+
247
+ index: function() {
248
+
249
+ }
250
+
251
+ });
252
+
253
+ EOS
254
+
255
+ MODEL_TEMPLATE = <<-EOS
256
+
257
+ var <%= className %> = Backbone.Model.extend({
258
+
259
+
260
+ });
261
+
262
+ var <%= className %>Collection = Backbone.Collection.extend({
263
+ model: <%= className %>
264
+
265
+ });
266
+
267
+
268
+ EOS
269
+
270
+ VIEW_TEMPLATE = <<-EOS
271
+
272
+ var <%= className %> = Backbone.View.extend({
273
+
274
+ events: {
275
+
276
+ },
277
+
278
+ initialize: function() {
279
+ _.bindAll(this, "render");
280
+ },
281
+
282
+ render: function() {
283
+
284
+ }
285
+
286
+ });
287
+
288
+ EOS
289
+
290
+
291
+ RAKEFILE_TEMPLATE = <<-EOS
292
+
293
+ # Your thor tasks here...
294
+
295
+ require 'lumbar/tasks'
296
+
297
+ EOS
298
+
299
+ JS_LIBS = {
300
+ 'jquery' => 'http://code.jquery.com/jquery-1.4.4.min.js',
301
+ 'backbone' => 'http://documentcloud.github.com/backbone/backbone-min.js',
302
+ 'underscore' => 'http://documentcloud.github.com/underscore/underscore-min.js',
303
+ 'head' => 'https://github.com/headjs/headjs/raw/master/dist/head.min.js'
304
+ }
305
+
306
+
307
+ end
308
+
309
+ end
@@ -0,0 +1,3 @@
1
+ module Lumbar
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "lumbar/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "lumbar"
7
+ s.version = Lumbar::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Matt McCray"]
10
+ s.email = ["darthapo@gmail.com"]
11
+ s.homepage = "https://github.com/darthapo/lumbar"
12
+ s.summary = %q{"Lumbar supports building Backbone (JS) applications."}
13
+ s.description = s.summary
14
+
15
+ s.rubyforge_project = "lumbar"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency 'thor'
23
+ s.add_dependency 'activesupport'
24
+ #s.add_dependency 'tilt'
25
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lumbar
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Matt McCray
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-12-23 00:00:00 -06:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: thor
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: activesupport
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ version_requirements: *id002
46
+ description: "\"Lumbar supports building Backbone (JS) applications.\""
47
+ email:
48
+ - darthapo@gmail.com
49
+ executables:
50
+ - lumbar
51
+ extensions: []
52
+
53
+ extra_rdoc_files: []
54
+
55
+ files:
56
+ - .gitignore
57
+ - Gemfile
58
+ - Rakefile
59
+ - Readme.markdown
60
+ - bin/lumbar
61
+ - lib/lumbar.rb
62
+ - lib/lumbar/runner.rb
63
+ - lib/lumbar/tasks.rb
64
+ - lib/lumbar/version.rb
65
+ - lumbar.gemspec
66
+ has_rdoc: true
67
+ homepage: https://github.com/darthapo/lumbar
68
+ licenses: []
69
+
70
+ post_install_message:
71
+ rdoc_options: []
72
+
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ segments:
81
+ - 0
82
+ version: "0"
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ segments:
89
+ - 0
90
+ version: "0"
91
+ requirements: []
92
+
93
+ rubyforge_project: lumbar
94
+ rubygems_version: 1.3.7
95
+ signing_key:
96
+ specification_version: 3
97
+ summary: "\"Lumbar supports building Backbone (JS) applications.\""
98
+ test_files: []
99
+