Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 74 additions & 34 deletions Cakefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,26 @@ util = require 'util'
binDir = "./node_modules/.bin/"

task 'watch', 'Watch for changes in coffee files to build and test', ->
util.log "Watching for changes in src and test"
lastTest = 0
watchDir 'src', ->
invoke 'build:src'
invoke 'build:min'
invoke 'build:doc'
invoke 'build:test'
watchDir 'test', ->
invoke 'build:test'
watchDir 'dist/test', (file)->
# We only want to run tests once (a second),
# even if a bunch of test files change
time = new Date().getTime()
if (time-lastTest) > 1000
lastTest = time
invoke 'test'
util.log "Watching for changes in src and test"
lastTest = 0
watchDir 'src', ->
invoke 'build:src'
invoke 'build:min'
invoke 'build:doc'
invoke 'build:test'
watchDir 'test', ->
invoke 'build:test'
watchDir 'dist/test', (file)->
# We only want to run tests once (a second),
# even if a bunch of test files change
time = new Date().getTime()
if (time-lastTest) > 1000
lastTest = time
invoke 'test'

task 'test', 'Run the tests', ->
util.log "Running tests..."
exec binDir + "jasmine-node --nocolor dist/test", (err, stdout, stderr) ->
exec binDir + "jasmine-node --nocolor dist/test", (err, stdout, stderr) ->
if err
handleError(parseTestResults(stdout), stderr)
else
Expand All @@ -34,35 +34,75 @@ task 'test', 'Run the tests', ->
task 'build', 'Build source and tests', ->
invoke 'build:src'
invoke 'build:min'
invoke 'build:amd:module'
invoke 'build:commonjs:module'
invoke 'build:window:function'
invoke 'build:test'

task 'build:src', 'Build the src files into lib', ->
util.log "Compiling src..."
exec binDir + "coffee -o lib/ -c src/", (err, stdout, stderr) ->
util.log 'Compiling src...'
exec binDir + 'coffee -o lib/ -c src/', (err, stdout, stderr) ->
handleError(err) if err

task 'build:window', 'Build the src files into lib as global window function', ->
invoke 'build:src'
invoke 'build:window:function'

task 'build:window:function', 'Take src files to create a window function', ->
sources = ['lib/stomp.js', 'src/window/window_export.js']
buildModule('window', sources)

task 'build:amd', 'Build the src files into lib as an AMD module', ->
invoke 'build:src'
invoke 'build:amd:module'

task 'build:amd:module', 'Take src files to create an AMD module', ->
sources = ['src/amd/amd_head.js', 'lib/stomp.js', 'src/amd/amd_tail.js']
buildModule('amd', sources)

task 'build:commonjs', 'Build the src files into lib as a commonjs module', ->
invoke 'build:src'
invoke 'build:commonjs:module'

task 'build:commonjs:module', 'Take src files to create a commonjs module', ->
sources = ['lib/stomp.js', 'src/commonjs/commonjs_exports.js']
buildModule('commonjs', sources)

task 'build:min', 'Build the minified files into lib', ->
util.log "Minify src..."
exec binDir + "uglifyjs -m --comments all -o lib/stomp.min.js lib/stomp.js", (err, stdout, stderr) ->
handleError(err) if err
util.log 'Minify src...'
minify('lib/stomp.js', 'lib/stomp.min.js')
minify('lib/amd/stomp.js', 'lib/amd/stomp.min.js')
minify('lib/commonjs/stomp.js', 'lib/commonjs/stomp.min.js')
minify('lib/window/stomp.js', 'lib/window/stomp.min.js')

task 'build:doc', 'Build docco documentation', ->
util.log "Building doc..."
exec binDir + "docco -o doc/ src/*.coffee", (err, stdout, stderr) ->
util.log 'Building doc...'
exec binDir + 'docco -o doc/ src/*.coffee', (err, stdout, stderr) ->
handleError(err) if err

task 'build:test', 'Build the test files into lib/test', ->
util.log "Compiling test..."
exec binDir + "coffee -o dist/test/ -c test/", (err, stdout, stderr) ->
util.log 'Compiling test...'
exec binDir + 'coffee -o dist/test/ -c test/', (err, stdout, stderr) ->
handleError(err) if err

buildModule = (module, sources) ->
util.log "Compiling #{module}..."
output = fs.openSync("lib/#{module}/stomp.js", 'w')
for source in sources
fs.writeSync(output, fs.readFileSync(source) + '\n')
fs.closeSync(output)

minify = (input, output) ->
exec binDir + "uglifyjs -m --comments all -o #{output} #{input}", (err, stdout, stderr) ->
handleError(err) if err

watchDir = (dir, callback) ->
fs.readdir dir, (err, files) ->
handleError(err) if err
for file in files then do (file) ->
fs.watchFile "#{dir}/#{file}", (curr, prev) ->
if +curr.mtime isnt +prev.mtime
callback "#{dir}/#{file}"
handleError(err) if err
for file in files then do (file) ->
fs.watchFile "#{dir}/#{file}", (curr, prev) ->
if +curr.mtime isnt +prev.mtime
callback "#{dir}/#{file}"

parseTestResults = (data) ->
lines = (line for line in data.split('\n') when line.length > 5)
Expand All @@ -73,14 +113,14 @@ parseTestResults = (data) ->
lastLine = (data) ->
(line for line in data.split('\n') when line.length > 5).pop()

handleError = (error, stderr) ->
handleError = (error, stderr) ->
if stderr? and !error
util.log stderr
displayNotification stderr.match(/\n(Error:[^\n]+)/)?[1]
else
util.log error
displayNotification error
displayNotification = (message = '') ->

displayNotification = (message = '') ->
options = { title: 'CoffeeScript' }
try require('growl').notify message, options
Loading