From cbb1e6c4e1a1df8d1c4443cf435b74dbad877087 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 25 Dec 2012 09:19:28 -0500 Subject: [PATCH] added Cakefile --- lib/client/storage/dropbox/Cakefile | 131 ++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 lib/client/storage/dropbox/Cakefile diff --git a/lib/client/storage/dropbox/Cakefile b/lib/client/storage/dropbox/Cakefile new file mode 100644 index 00000000..4a530770 --- /dev/null +++ b/lib/client/storage/dropbox/Cakefile @@ -0,0 +1,131 @@ +async = require 'async' +{spawn, exec} = require 'child_process' +fs = require 'fs' +log = console.log +remove = require 'remove' + +# Node 0.6 compatibility hack. +unless fs.existsSync + path = require 'path' + fs.existsSync = (filePath) -> path.existsSync filePath + + +task 'build', -> + build() + +task 'test', -> + vendor -> + build -> + ssl_cert -> + tokens -> + run 'node_modules/mocha/bin/mocha --colors --slow 200 ' + + '--timeout 10000 --require test/js/helper.js test/js/*test.js' + +task 'webtest', -> + vendor -> + build -> + ssl_cert -> + tokens -> + webFileServer = require './test/js/web_file_server.js' + webFileServer.openBrowser() + +task 'cert', -> + remove.removeSync 'test/ssl', ignoreMissing: true + ssl_cert() + +task 'vendor', -> + remove.removeSync './test/vendor', ignoreMissing: true + vendor() + +task 'tokens', -> + remove.removeSync './test/.token', ignoreMissing: true + build -> + tokens -> + process.exit 0 + +task 'doc', -> + run 'node_modules/codo/bin/codo src' + +task 'extension', -> + run 'node_modules/coffee-script/bin/coffee ' + + '--compile test/chrome_extension/*.coffee' + +build = (callback) -> + commands = [] + # Compile without --join for decent error messages. + commands.push 'node_modules/coffee-script/bin/coffee --output tmp ' + + '--compile src/*.coffee' + commands.push 'node_modules/coffee-script/bin/coffee --output lib ' + + '--compile --join dropbox.js src/*.coffee' + # Minify the javascript, for browser distribution. + commands.push 'node_modules/uglify-js/bin/uglifyjs --compress --mangle ' + + '--output lib/dropbox.min.js lib/dropbox.js' + commands.push 'node_modules/coffee-script/bin/coffee --output test/js ' + + '--compile test/src/*.coffee' + async.forEachSeries commands, run, -> + callback() if callback + +ssl_cert = (callback) -> + fs.mkdirSync 'test/ssl' unless fs.existsSync 'test/ssl' + if fs.existsSync 'test/ssl/cert.pem' + callback() if callback? + return + + run 'openssl req -new -x509 -days 365 -nodes -batch ' + + '-out test/ssl/cert.pem -keyout test/ssl/cert.pem ' + + '-subj /O=dropbox.js/OU=Testing/CN=localhost ', callback + +vendor = (callback) -> + # All the files will be dumped here. + fs.mkdirSync 'test/vendor' unless fs.existsSync 'test/vendor' + + # Embed the binary test image into a 7-bit ASCII JavaScript. + bytes = fs.readFileSync 'test/binary/dropbox.png' + fragments = [] + for i in [0...bytes.length] + fragment = bytes.readUInt8(i).toString 16 + while fragment.length < 4 + fragment = '0' + fragment + fragments.push "\\u#{fragment}" + js = "window.testImageBytes = \"#{fragments.join('')}\";" + fs.writeFileSync 'test/vendor/favicon.js', js + + downloads = [ + # chai.js ships different builds for browsers vs node.js + ['http://chaijs.com/chai.js', 'test/vendor/chai.js'], + # sinon.js also ships special builds for browsers + ['http://sinonjs.org/releases/sinon.js', 'test/vendor/sinon.js'], + # ... and sinon.js ships an IE-only module + ['http://sinonjs.org/releases/sinon-ie.js', 'test/vendor/sinon-ie.js'] + ] + async.forEachSeries downloads, download, -> + callback() if callback + +tokens = (callback) -> + TokenStash = require './test/js/token_stash.js' + tokenStash = new TokenStash + (new TokenStash()).get -> + callback() if callback? + +run = (args...) -> + for a in args + switch typeof a + when 'string' then command = a + when 'object' + if a instanceof Array then params = a + else options = a + when 'function' then callback = a + + command += ' ' + params.join ' ' if params? + cmd = spawn '/bin/sh', ['-c', command], options + cmd.stdout.on 'data', (data) -> process.stdout.write data + cmd.stderr.on 'data', (data) -> process.stderr.write data + process.on 'SIGHUP', -> cmd.kill() + cmd.on 'exit', (code) -> callback() if callback? and code is 0 + +download = ([url, file], callback) -> + if fs.existsSync file + callback() if callback? + return + + run "curl -o #{file} #{url}", callback \ No newline at end of file