UNPKG

robusta

Version:

A tool for generating Backbone/CoffeeScript Node.js-based apps

142 lines (120 loc) 3.69 kB
fs = require 'fs' http = require 'http' npm = require 'npm' create_folders = -> console.log '++ generating folders' for folder in ['src', 'vendors', 'www', 'www/js'] console.log "++ #{folder}" fs.mkdirSync folder, 0o777 create_toaster_file = -> console.log '++ generating toaster.coffee' toaster_file = ''' toast 'src' # EXCLUDED FOLDERS (optional) # exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ] # => VENDORS (optional) vendors: ['vendors/jquery.min.js', 'vendors/underscore-min.js', 'vendors/backbone-min.js' ] # => OPTIONS (optional, default values listed) # bare: false # packaging: true # expose: '' minify: false # => HTTPFOLDER (optional), RELEASE / DEBUG (required) httpfolder: 'www' release: 'www/js/app.js' debug: 'www/js/app-debug.js' ''' fs.writeFileSync 'toaster.coffee', toaster_file create_package_file = -> console.log '++ generating package.json' fs.writeFileSync 'package.json', ''' { "name": "your_app", "version": "0.0.1", "dependencies": { "express": "2.5.0", "coffee-script": "1.1.3" } } ''' download_vendor_files = (when_complete) -> console.log "++ downloading vendor files" vendor_files = [ { file: "underscore-min.js", host: "underscorejs.org" }, { file: "backbone-min.js", host: "backbonejs.org" }, { file: "jquery.min.js", host: "code.jquery.com"} ] number_to_download = vendor_files.length files_downloaded = 0 download_next_file = -> item = vendor_files.pop() return if !item console.log "++ downloading #{item.host}/#{item.file} to vendors/#{item.file}" http.get {host: item.host, port: 80, path: "/#{item.file}" }, (resp) -> data = "" resp.on 'data', (chunk) -> data += chunk resp.on 'end', -> fs.writeFileSync "vendors/#{item.file}", data when_complete() if ++files_downloaded >= number_to_download download_next_file() download_next_file() setup_backbone_structure = -> console.log "++ setting up backbone structure" for folder in ['app', 'app/collections', 'app/models', 'app/routers', 'app/templates', 'app/views'] console.log "++ src/#{folder}" fs.mkdirSync "src/#{folder}", 0o777 console.log "++ src/app/app.coffee" fs.writeFileSync "src/app/app.coffee", "# application startup code" create_website = -> console.log "++ creating website" console.log "++ www/index.html" fs.writeFileSync "www/index.html", ''' <!doctype html> <html> <head> <script type="text/javascript" src="js/app.js"></script> </head> <body> <h1>Hello, Robusta</h1> </body> </html> ''' create_server = -> console.log "++ creating server" console.log "++ server.coffee" fs.writeFileSync "server.coffee", ''' port = process.env.PORT || 3001 app = require('express').createServer() serveUp = (res, filename) -> console.log "REQUESTING: ", filename res.sendfile "#{__dirname}/www#{filename}" app.get "/", (req, res) -> serveUp res, "/index.html" app.get "/*", (req, res) -> serveUp res, req.url app.listen port console.log "Server started on #{port}" ''' build_js = -> console.log "++ compiling javascript" toaster = require 'coffee-toaster' new toaster.Toaster '.', {'c': true} finished = -> console.log '' console.log 'Your project has been created. Before you begin, you must install your packages:' console.log ' npm install' console.log '' console.log 'To run the server:' console.log ' robusta run' console.log '' console.log 'For more options:' console.log ' robusta -h' console.log '' exports.initialize_project = -> create_folders() create_toaster_file() create_package_file() download_vendor_files -> setup_backbone_structure() create_website() create_server() build_js() finished()