coffee-toaster
Version:
Minimalist manager and build system for CoffeeScript, an alternative for AMD's or CJS's OOP patterns, but with similar results. Made for those who dare to use class definitions in CoffeeScript while being able to easily inherit from external files. Powered with imports directives that use wildcards facilities, exposed scopes and excluded files filter options. The system can even use folders-as-namespaces to help you avoid naming collisions in architecture.
67 lines (48 loc) • 1.98 kB
text/coffeescript
#<< toaster/generators/question
#<< toaster/generators/config
class Project extends toaster.generators.Question
# requirements
path = require "path"
pn = path.normalize
fs = require "fs"
FsUtil = toaster.utils.FsUtil
constructor:(@basepath)->
create:(folderpath, name, src, release)->
if !folderpath || folderpath == true
return error "You need to inform a target path!\n" +
"\ttoaster -n myawesomeapp".green
if folderpath.substr( 0, 1 ) != "/"
target = "#{@basepath}/#{folderpath}"
else
target = folderpath
if name? && src? && release?
return @scaffold target, name, src, release
q1 = "Path to your src folder? [src] : "
q2 = "Path to your release file? [www/js/app.js] : "
q3 = "Starting from your webroot '/', what's the folderpath to "+
"reach your release file? (i.e. js) (optional) : "
@ask q1.magenta, /.*/, (src = null)=>
@ask q2.magenta, /.*/, (release = null)=>
@ask q3.cyan, /.*/, (httpfolder = null)=>
$src = src || "src"
$release = release || "www/js/app.js"
if src is '' and release is '' and httpfolder is ''
$httpfolder = 'js'
else
$httpfolder = httpfolder || ""
@scaffold target, $src, $release, $httpfolder
process.exit()
scaffold:(target, src, release, httpfolder)=>
srcdir = pn "#{target}/#{src}"
vendorsdir = pn "#{target}/vendors"
releasefile = pn "#{target}/#{release}"
releasedir = releasefile.split("/").slice(0, -1).join "/"
log "#{'Created'.green.bold} #{target}" if FsUtil.mkdir_p target
log "#{'Created'.green.bold} #{srcdir}" if FsUtil.mkdir_p srcdir
log "#{'Created'.green.bold} #{vendorsdir}" if FsUtil.mkdir_p vendorsdir
log "#{'Created'.green.bold} #{releasedir}" if FsUtil.mkdir_p releasedir
srcdir = srcdir.replace( target, "" ).substr 1
releasefile = releasefile.replace( target, "" ).substr 1
new toaster.generators.Config( target ).write srcdir,
releasefile,
httpfolder