cakefile.coffee | |
|---|---|
| * Cakefile Template * is a Template for a common Cakefile that you may use in a coffeescript nodejs project. It comes baked in with 4 tasks:
| fs = require 'fs'
{print} = require 'util'
{spawn, exec} = require 'child_process' |
| ANSI Terminal Colors | bold = '\033[0;1m'
green = '\033[0;32m'
reset = '\033[0m'
red = '\033[0;31m' |
| Internal Functions walkgiven string as dir which represents a directory in relation to local directory and callback as done in the form of (err, results) then recurse through directory returning an array of files | walk = (dir, done) ->
results = []
fs.readdir dir, (err, list) ->
return done(err, []) if err
pending = list.length
return done(null, results) unless pending
for name in list
file = "#{dir}/#{name}"
try
stat = fs.statSync file
catch err
stat = null
if stat?.isDirectory()
walk file, (err, res) ->
results.push name for name in res
done(null, results) unless --pending
else
results.push file
done(null, results) unless --pending |
loggiven string as a message and string as a color and optional string as an explaination then builds a statement and logs to console. | log = (message, color, explanation) -> console.log color + message + reset + ' ' + (explanation or '') |
launchgiven string as a cmd and optional array and option flags and optional callback then spawn cmd with options and pipe to process stdout and stderr respectively and on child process exit emit callback if set and status is 0 | launch = (cmd, options=[], callback) ->
app = spawn cmd, options
app.stdout.pipe(process.stdout)
app.stderr.pipe(process.stderr)
app.on 'exit', (status) -> callback?() if status is 0 |
buildgiven optional boolean as watch and optional function as callback then invoke launch passing coffee command and defaulted options to compile src to lib | build = (watch, callback) ->
if typeof watch is 'function'
callback = watch
watch = false
options = ['-c', '-b', '-o', 'lib', 'src']
options.unshift '-w' if watch
launch 'coffee', options, callback |
mochagiven optional array of option flags and optional function as callback then invoke launch passing mocha command | mocha = (options, callback) ->
if typeof options is 'function'
callback = options
options = []
launch 'mocha', options, callback |
doccogiven optional function as callback then invoke launch passing docco command | docco = (callback) ->
walk 'src', (err, files) -> launch 'docco', files, callback |
| Cakefile Tasks docsGenerate Annotated Documentation Usage
| task 'docs', 'generate documentation', -> docco() |
buildBuilds Source Usage
| task 'build', 'compile source', -> build -> log ":)", green |
watchBuilds your source whenever it changes Usage
| task 'watch', 'compile and watch', -> build true, -> log ":-)", green |
testRuns your test suite. Usage
| task 'test', 'run tests', -> build -> mocha -> log ":)", green
|