diff --git a/.gitignore b/.gitignore index db3f887..ff0456f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ *~ npm-debug.log node_modules/* +.idea diff --git a/LICENSE-MIT b/LICENSE-MIT index 17416f9..5c43c07 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,4 +1,6 @@ -Copyright (c) 2012 Ken Elf Mathieu Sternberg +Copyright (c) +2012 Ken Elf Mathieu Sternberg +2014 Sam Hiatt Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/README.md b/README.md index ba68fa6..6bf6a29 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # grunt-couchapp -A grunt plugin for building and installing couchapps +A grunt plugin for building and installing couchapps, +forked from https://github.com/garbados/grunt-couchapp ## Getting Started diff --git a/package.json b/package.json index dc2107a..55b1807 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,23 @@ { "name": "grunt-couchapp", "description": "A grunt plugin for building and uploading couchapps", - "version": "0.2.1", + "version": "0.2.2", "homepage": "https://github.com/garbados/grunt-couchapp", "author": { - "name": "Ken Elf Mathieu Sternberg", - "email": "elf.sternberg@gmail.com", - "url": "http://elfsternberg.com" + "name":"Sam Hiatt", + "email": "sam.hiatt@weather.com" }, - "contributors": [{ - "name": "Max Thayer", - "email": "garbados@gmail.com", - "url": "http://maxthayer.org" - }], + "contributors": [ + { + "name": "Ken Elf Mathieu Sternberg", + "email": "elf.sternberg@gmail.com", + "url": "http://elfsternberg.com" + },{ + "name": "Max Thayer", + "email": "garbados@gmail.com", + "url": "http://maxthayer.org" + } + ], "repository": { "type": "git", "url": "git://github.com/garbados/grunt-couchapp.git" diff --git a/tasks/couchapp.js b/tasks/couchapp.js index 30482c3..0d24d33 100755 --- a/tasks/couchapp.js +++ b/tasks/couchapp.js @@ -32,8 +32,11 @@ module.exports = function(grunt) { grunt.registerMultiTask("couchapp", "Install Couchapp", function() { var appobj, done; done = this.async(); - - appobj = require(path.join(process.cwd(), path.normalize(this.data.app))); + if (require("fs").lstatSync(this.data.app).isDirectory()) { // if new-style (directory-based) couchapp app + appobj = couchapp.loadFiles(this.data.app); + } else { // otherwise, fall back to old style. + appobj = require(path.join(process.cwd(), path.normalize(this.data.app))) + } return couchapp.createApp(appobj, this.data.db, function(app) { return app.push(done); @@ -55,13 +58,14 @@ module.exports = function(grunt) { grunt.log.writeln("Database " + db.name + " not present... skipping."); return done(null, null) ; } else { - grunt.warn("Database " + db.name + " does not exist."); + throw ("Database " + db.name + " does not exist."); } } else { - grunt.warn(err); + throw err; } } - return done(err, null); + // remove db was a success + return done(); }); } else { grunt.log.writeln("No database specified... skipping."); @@ -69,7 +73,7 @@ module.exports = function(grunt) { } } catch (e) { grunt.warn(e); - done(e, null); + return done(e, null); } return null; }); @@ -86,26 +90,40 @@ module.exports = function(grunt) { nano = require('nano')(db.url); nano.db.create(db.name, function(err, res) { if (err) { - if (_this.data.options && _this.data.options.okay_if_exists) { - grunt.log.writeln("Database " + db.name + " exists, skipping"); - return done(null, null); - } else { - grunt.warn("Database " + db.name + " exists, aborting."); - return done(err, null); + if (err.error && err.error=="unauthorized") { + grunt.warn(err.reason); + throw err; + } else if (err.code && err.description) { // probably connection error + throw err; } - } else { - grunt.log.writeln("Database " + db.name + " created."); + else if (err.error && err.error=="file_exists") { + if (_this.data.options && _this.data.options.okay_if_exists) { + grunt.log.writeln("Database " + db.name + " exists, skipping"); + return done(null, null); + } else { + grunt.warn("Database " + db.name + " exists and okay_if_exists set to false. Aborting."); + throw err; + } + } else { + console.warn("Unrecognized error."); + throw err + } + } else if (res && res.ok==true) { + grunt.log.ok("Database " + db.name + " created."); return done(null, null); + } else { + console.log("Unexpected response received."); + console.dir(res); + throw "Unexpected response"; } }); } else { var err_msg = "No database specified to create!"; - grunt.warn(err_msg); - return done(new Error(err_msg), null); + throw err_msg; } } catch (e) { grunt.warn(e); - done(e, null); + return done(e, null); } return null; });