


# 			### Formula: variables ###



formula
	mocha:./node_modules/.bin/mocha
	jshint:./node_modules/.bin/jshint --verbose
	browserify:./node_modules/.bin/browserify
	uglify:./node_modules/.bin/uglifyjs
	testling:./node_modules/.bin/testling





#			###   Spells: rules   ###



.summon
	cast
		npm-install
	
	summon
		browser/async.js
		browser/async.min.js
		README.md
		bdd-spec.md

.dev-summon
	cast
		summon
		npm-dev-install

# Delete files that can be rebuilt
.clean
	scroll
		rm -rf README.md bdd-spec.md node_modules

# Run all tests: jshint & bdd
.test
	cast
		hint
		bdd

# Build
.build
	cast
		browser

# Build the browser lib
.browser
	summon
		browser/async.js
		browser/async.min.js

# Testling: Browser-side Mocha
.browser-test
	summon
		lib/browser.js
		lib/core.js
		lib/wrapper.js
		test/async-test.js
	
	scroll
		echo No browser test

.browser-test-broken
	summon
		lib/browser.js
		lib/core.js
		lib/wrapper.js
		test/async-test.js
	
	scroll
		echo -ne "\x1b[33mReminder: On linux, Xvfb should be installed!\x1b[0m\n"
		killall Xvfb ; sleep 1
		${testling}

# Run bdd tests
.bdd
	summon
		package.json
		lib/async.js
		lib/core.js
		lib/wrapper.js
		lib/exit.js
		test/async-test.js
	
	cast
		npm-dev-install
	
	scroll
		${mocha} test/async-test.js -R spec

# Run jshint
.hint
	summon
		lib/async.js
		lib/core.js
		lib/wrapper.js
		lib/exit.js
		lib/browser.js
		test/async-test.js
	
	cast
		npm-dev-install
	
	scroll
		${jshint} lib/*.js test/async-test.js

# Publish to NPM & Git
.publish
	cast
		npm-publish
		git-push






#			###   Non-user spells: internal rules   ###



# NPM install
.npm-install
	summon
		package.json
	scroll
		npm install --production

# NPM install for developpement usage
.npm-dev-install
	summon
		package.json
	scroll
		npm install

# Publish to NPM
.npm-publish
	cast
		check-master
		upgrade-version
	scroll
		npm publish

# Upgrade package version
.upgrade-version
	summon
		lib/async.js
		lib/wrapper.js
		test/async-test.js
		documentation.md
	scroll
		npm version patch -m "Upgrade package.json version to %s"

# This will fail if we are not on master branch (grep exit 1 if nothing found)
.check-master
	scroll silence
		git branch | grep  "^* master$"

# Git push
.git-push
	summon
		spellbook
		package.json
		lib/async.js
		lib/wrapper.js
		test/async-test.js
	scroll
		# 'npm version patch' create the git tag by itself... 
		# git tag v`cat package.json | grep version | sed -r 's/.*"([0-9.]*)".*/\1/'`
		git push origin master --tags





#			###   Summoning: files to build   ###



:bdd-spec.md
	summon
		package.json
		lib/async.js
		lib/core.js
		lib/wrapper.js
		lib/exit.js
		test/async-test.js
		header-bdd-spec.md
	
	scroll
		cp header-bdd-spec.md bdd-spec.md
		${mocha} test/async-test.js -R markdown >> bdd-spec.md

# Build the browser lib
:browser/async.js
	summon
		lib/browser.js
		lib/core.js
		lib/wrapper.js
	
	scroll
		${browserify} lib/browser.js -s async -o browser/async.js

# Build the browser minified lib
:browser/async.min.js
	summon
		browser/async.js
	
	scroll
		${uglify} browser/async.js -o browser/async.min.js -m

:README.md
	summon
		documentation.md
		# bdd-spec.md
	scroll
		# cat documentation.md bdd-spec.md > README.md
		cp documentation.md README.md

:Makefile
	summon
		spellbook
		
	scroll
		./bin/spellcast --makefile
