diff --git a/Jakefile b/Jakefile index 567bedd8..cdb92858 100644 --- a/Jakefile +++ b/Jakefile @@ -1,9 +1,45 @@ var child_process = require('child_process') , exec = child_process.exec; +namespace('app', function () { + desc('Creates a new Geddy app scaffold.'); + task('create', [], function (appName) { + if (!appName) { + throw new Error('No app-name specified.'); + } + var dir = appName + , templateDir = __dirname + '/templates/base' + , cmds = [ + 'mkdir -p ./' + dir + , 'mkdir -p ./' + dir + '/config' + , 'mkdir -p ./' + dir + '/app/models' + , 'mkdir -p ./' + dir + '/app/controllers' + , 'mkdir -p ./' + dir + '/app/views' + , 'mkdir -p ./' + dir + '/public' + , 'mkdir -p ./' + dir + '/public/js' + , 'mkdir -p ./' + dir + '/public/css' + , 'mkdir -p ./' + dir + '/log' + , 'cp ' + templateDir + '/router.js ' + dir + '/config/' + , 'cp ' + templateDir + '/init.js ' + dir + '/config/' + , 'cp ' + templateDir + '/environment.js ' + dir + '/config/' + , 'cp ' + templateDir + '/development.js ' + dir + '/config/' + , 'cp ' + templateDir + '/production.js ' + dir + '/config/' + , 'cp ' + templateDir + '/main.js ' + dir + '/app/controllers/' + , 'cp ' + templateDir + '/application.js ' + dir + '/app/controllers/' + , 'cp ' + templateDir + '/master.css ' + dir + '/public/css/' + , 'cp ' + templateDir + '/favicon.ico ' + dir + '/public/' + ]; + runCmds(cmds, function () { + console.log('Created app ' + dir + '.'); + }); + }); +}); + namespace('doc', function () { - task('generate', function () { - var cmd = '../node-jsdoc-toolkit/app/run.js -n -t=../node-jsdoc-toolkit/templates/codeview -d=./doc/ ./lib'; + desc('Generate docs for Geddy'); + task('generate', ['doc:clobber'], function () { + var cmd = '../node-jsdoc-toolkit/app/run.js -n -r=100 ' + + '-t=../node-jsdoc-toolkit/templates/codeview -d=./doc/ ./lib'; console.log('Generating docs ...'); exec(cmd, function (err, stdout, stderr) { if (err) { @@ -19,5 +55,57 @@ namespace('doc', function () { complete(); }); }, true); + + desc('Clobber the generated docs.'); + task('clobber', function () { + var cmd = 'rm -fr ./doc/*'; + exec(cmd, function (err, stdout, stderr) { + if (err) { + throw err; + } + if (stderr) { + console.log(stderr); + } + if (stdout) { + console.log(stdout); + } + console.log('Clobbered old docs.'); + complete(); + }); + }, true); + }); +// Runs an array of shell commands asynchronously, calling the +// next command off the queue inside the callback from child_process.exec. +// When the queue is done, call the final callback function. +var runCmds = function (arr, callback, printStdout) { + var run = function (cmd) { + child_process.exec(cmd, function (err, stdout, stderr) { + if (err) { + console.log('Error: ' + JSON.stringify(err)); + } + else if (stderr) { + console.log('Error: ' + stderr); + } + else { + if (printStdout) { + console.log(stdout); + } + if (arr.length) { + var next = arr.shift(); + run(next); + } + else { + if (callback) { + callback(); + } + } + } + }); + }; + run(arr.shift()); +}; + + + diff --git a/bin/cli.js b/bin/cli.js index c1901532..30ce55fb 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -1,15 +1,22 @@ #!/usr/bin/env node -// TODO: add start/stop/restart commands -// command to create new project layout too +// TODO: add start/stop/restart commands, commands to create new app-layout -var Server = require(__dirname + '/../lib/server') - , parseopts = require(__dirname + '/../lib/parseopts') +var childProcess = require('child_process') + , fs = require('fs') + , exec = require('child_process').exec + , Server = require('../lib/server') + , parseopts = require('../lib/parseopts') + , utils = require('../lib/utils/index') + , parser , args = process.argv.slice(2) - , childProcess = require('child_process') - , fs = require('fs'); + , optsReg + , cmds + , opts + , usage + , cmd; -var usage = '' +usage = '' + 'Geddy web framework for Node.js\n' + '*********************************************************************************************\n' + 'With no flags, server starts running on port 4000, accepting requests from http://localhost.\n' @@ -51,9 +58,10 @@ optsReg = [ } ]; -Parser = new parseopts.Parser(optsReg); -parsed = Parser.parse(args); -opts = Parser.opts; +parser = new parseopts.Parser(optsReg); +parser.parse(args); +cmds = parser.cmds; +opts = parser.opts; function start() { /* @@ -93,6 +101,38 @@ function start() { if (typeof opts.help != 'undefined') { Server.die(usage); } +else { + // `geddy app foo` or `geddy resource bar` etc. -- run generators + if (cmds.length) { + cmd = 'jake -f /' + __dirname + '/../Jakefile '; + if (!cmds[1]) { + throw new Error(cmds[0] + ' command requires another argument.'); + } + switch (cmds[0]) { + case 'app': + cmd += 'app:create[' + cmds[1] + ']' + break; + case 'resource': + break; + default: + Server.die(cmds[0] + ' is not a Geddy command.'); + } + exec(cmd, function (err, stdout, stderr) { + if (err) { + throw err; + } + else if (stderr) { + console.log(stderr); + } + else { + console.log(utils.string.trim(stdout)); + } + }); + } + // Just `geddy` -- start the server + else { + start(); + } +} -start(); diff --git a/old/geddy-core/scripts/gen/bare_controller.ejs b/templates/bare_controller.ejs similarity index 100% rename from old/geddy-core/scripts/gen/bare_controller.ejs rename to templates/bare_controller.ejs diff --git a/old/geddy-core/scripts/gen/application.js b/templates/base/application.js similarity index 100% rename from old/geddy-core/scripts/gen/application.js rename to templates/base/application.js diff --git a/old/geddy-core/scripts/gen/development.js b/templates/base/development.js similarity index 98% rename from old/geddy-core/scripts/gen/development.js rename to templates/base/development.js index 092bb6bd..a24bc9b7 100644 --- a/old/geddy-core/scripts/gen/development.js +++ b/templates/base/development.js @@ -50,6 +50,5 @@ var config = new function () { //*/ }(); - -module.exports = config; +config; diff --git a/old/geddy-core/scripts/gen/favicon.ico b/templates/base/favicon.ico similarity index 100% rename from old/geddy-core/scripts/gen/favicon.ico rename to templates/base/favicon.ico diff --git a/old/geddy-core/scripts/gen/inflections.js b/templates/base/inflections.js similarity index 100% rename from old/geddy-core/scripts/gen/inflections.js rename to templates/base/inflections.js diff --git a/old/geddy-core/scripts/gen/init.js b/templates/base/init.js similarity index 100% rename from old/geddy-core/scripts/gen/init.js rename to templates/base/init.js diff --git a/old/geddy-core/scripts/gen/main.js b/templates/base/main.js similarity index 100% rename from old/geddy-core/scripts/gen/main.js rename to templates/base/main.js diff --git a/old/geddy-core/scripts/gen/master.css b/templates/base/master.css similarity index 100% rename from old/geddy-core/scripts/gen/master.css rename to templates/base/master.css diff --git a/old/geddy-core/scripts/gen/production.js b/templates/base/production.js similarity index 98% rename from old/geddy-core/scripts/gen/production.js rename to templates/base/production.js index d56b62b6..6cb31c05 100644 --- a/old/geddy-core/scripts/gen/production.js +++ b/templates/base/production.js @@ -49,7 +49,6 @@ var config = new function () { }; //*/ }(); - -module.exports = config; +config; diff --git a/old/geddy-core/scripts/gen/router.js b/templates/base/router.js similarity index 93% rename from old/geddy-core/scripts/gen/router.js rename to templates/base/router.js index bcbcf6aa..5837f26b 100644 --- a/old/geddy-core/scripts/gen/router.js +++ b/templates/base/router.js @@ -16,9 +16,8 @@ * */ -var Router = require('geddy-core/lib/router').Router; -var router = new Router(); +var router = new geddy.RegExpRouter(); router.match('/').to({controller: 'Main', action: 'index'}); // Basic routes diff --git a/old/geddy-core/scripts/gen/resource_controller.ejs b/templates/resource_controller.ejs similarity index 100% rename from old/geddy-core/scripts/gen/resource_controller.ejs rename to templates/resource_controller.ejs diff --git a/old/geddy-core/scripts/gen/resource_controller_scaffold.ejs b/templates/resource_controller_scaffold.ejs similarity index 100% rename from old/geddy-core/scripts/gen/resource_controller_scaffold.ejs rename to templates/resource_controller_scaffold.ejs diff --git a/old/geddy-core/scripts/gen/resource_model.ejs b/templates/resource_model.ejs similarity index 100% rename from old/geddy-core/scripts/gen/resource_model.ejs rename to templates/resource_model.ejs diff --git a/old/geddy-core/scripts/gen/views/add.html.ejs b/templates/views/add.html.ejs similarity index 100% rename from old/geddy-core/scripts/gen/views/add.html.ejs rename to templates/views/add.html.ejs diff --git a/old/geddy-core/scripts/gen/views/add_scaffold.html.ejs b/templates/views/add_scaffold.html.ejs similarity index 100% rename from old/geddy-core/scripts/gen/views/add_scaffold.html.ejs rename to templates/views/add_scaffold.html.ejs diff --git a/old/geddy-core/scripts/gen/views/edit.html.ejs b/templates/views/edit.html.ejs similarity index 100% rename from old/geddy-core/scripts/gen/views/edit.html.ejs rename to templates/views/edit.html.ejs diff --git a/old/geddy-core/scripts/gen/views/edit_scaffold.html.ejs b/templates/views/edit_scaffold.html.ejs similarity index 100% rename from old/geddy-core/scripts/gen/views/edit_scaffold.html.ejs rename to templates/views/edit_scaffold.html.ejs diff --git a/old/geddy-core/scripts/gen/views/index.html.ejs b/templates/views/index.html.ejs similarity index 100% rename from old/geddy-core/scripts/gen/views/index.html.ejs rename to templates/views/index.html.ejs diff --git a/old/geddy-core/scripts/gen/views/index_scaffold.html.ejs b/templates/views/index_scaffold.html.ejs similarity index 100% rename from old/geddy-core/scripts/gen/views/index_scaffold.html.ejs rename to templates/views/index_scaffold.html.ejs diff --git a/old/geddy-core/scripts/gen/views/layout.html.ejs b/templates/views/layout.html.ejs similarity index 100% rename from old/geddy-core/scripts/gen/views/layout.html.ejs rename to templates/views/layout.html.ejs diff --git a/old/geddy-core/scripts/gen/views/show.html.ejs b/templates/views/show.html.ejs similarity index 100% rename from old/geddy-core/scripts/gen/views/show.html.ejs rename to templates/views/show.html.ejs