cake.coffee | |
---|---|
Running | |
External dependencies. | fs = require 'fs'
path = require 'path'
helpers = require './helpers'
optparse = require './optparse'
CoffeeScript = require './coffee-script' |
Keep track of the list of defined tasks, the accepted options, and so on. | tasks = {}
options = {}
switches = []
oparse = null |
Mixin the top-level Cake functions for Cakefiles to use directly. | helpers.extend global, |
Define a Cake task with a short name, an optional sentence description, and the function to run as the action itself. | task: (name, description, action) ->
[action, description] = [description, action] unless action
tasks[name] = {name, description, action} |
Define an option that the Cakefile accepts. The parsed options hash, containing all of the command-line options passed, will be made available as the first argument to the action. | option: (letter, flag, description) ->
switches.push [letter, flag, description] |
Invoke another task in the current Cakefile. | invoke: (name) ->
missingTask name unless tasks[name]
tasks[name].action options |
Run | exports.run = ->
path.exists 'Cakefile', (exists) ->
throw new Error("Cakefile not found in #{process.cwd()}") unless exists
args = process.argv.slice 2
CoffeeScript.run fs.readFileSync('Cakefile').toString(), filename: 'Cakefile'
oparse = new optparse.OptionParser switches
return printTasks() unless args.length
options = oparse.parse(args)
invoke arg for arg in options.arguments |
Display the list of Cake tasks in a format similar to | printTasks = ->
console.log ''
for name, task of tasks
spaces = 20 - name.length
spaces = if spaces > 0 then Array(spaces + 1).join(' ') else ''
desc = if task.description then "# #{task.description}" else ''
console.log "cake #{name}#{spaces} #{desc}"
console.log oparse.help() if switches.length |
Print an error and exit when attempting to all an undefined task. | missingTask = (task) ->
console.log "No such task: \"#{task}\""
process.exit 1
|