commit 433aecd97235d8eb951363b134735d037c5d1b9e Author: Rowan Manning Date: Fri Sep 13 16:49:19 2013 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d06b7b9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ + +# Config files +config/development.json +config/production.json + +# Generated npm files +node_modules +npm-debug.log diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f57046a --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ + +# Group targets +all: deps + +# Install dependencies +deps: + @echo "Installing dependencies..." + @npm install + +# Start the application +start: + @echo "Starting application..." + @NODE_ENV=production node . + +# Start the application in development mode +start-dev: + @echo "Starting application (development mode)..." + @NODE_ENV=development ./node_modules/.bin/supervisor -q . diff --git a/app.js b/app.js new file mode 100644 index 0000000..aeae3ad --- /dev/null +++ b/app.js @@ -0,0 +1,35 @@ +'use strict'; + +var async = require('async'); +var createClient = require('pa11y-webservice-client-node'); +var EventEmitter = require('events').EventEmitter; +var express = require('express'); +var http = require('http'); + +module.exports = initApp; + +// Initialise the application +function initApp (config, callback) { + + var app = new EventEmitter(); + app.address = null; + app.express = express(); + app.server = http.createServer(app.express); + app.webservice = createClient(config.webservice); + + require('./route/index')(app); + require('./route/new')(app); + require('./route/task')(app); + + app.express.use(function (err, req, res, next) { + app.emit('route-error', err); + res.send('Error'); + }); + + app.server.listen(config.port, function (err) { + var address = app.server.address(); + app.address = 'http://' + address.address + ':' + address.port; + callback(err, app); + }); + +} diff --git a/config/development.sample.json b/config/development.sample.json new file mode 100644 index 0000000..d4d8316 --- /dev/null +++ b/config/development.sample.json @@ -0,0 +1,4 @@ +{ + "webservice": "http://localhost:3000/", + "port": 4000 +} \ No newline at end of file diff --git a/config/production.sample.json b/config/production.sample.json new file mode 100644 index 0000000..d4d8316 --- /dev/null +++ b/config/production.sample.json @@ -0,0 +1,4 @@ +{ + "webservice": "http://localhost:3000/", + "port": 4000 +} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..fdea528 --- /dev/null +++ b/index.js @@ -0,0 +1,19 @@ +'use strict'; + +var chalk = require('chalk'); +var config = require('./config/' + (process.env.NODE_ENV || 'development') + '.json'); + +require('./app')(config, function (err, app) { + + console.log(''); + console.log(chalk.underline.magenta('pa11y-web started')); + console.log(chalk.grey('mode: %s'), process.env.NODE_ENV); + console.log(chalk.grey('uri: %s'), app.address); + + app.on('route-error', function (err) { + if (err.code === 'ECONNREFUSED') { + console.log(chalk.red('Error: could not connect to pa11y-webservice')) + } + }); + +}); diff --git a/package.json b/package.json new file mode 100644 index 0000000..bfcf996 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "pa11y-web", + "version": "0.0.0", + "private": true, + + "engines": { + "node": ">=0.10" + }, + "dependencies": { + "chalk": "~0.2", + "express": "~3.4", + "pa11y-webservice-client-node": "git+ssh://git@github.com:nature/pa11y-webservice-client-node.git#1.0.0-beta.1" + }, + "devDependencies": { + "supervisor": "~0.5" + }, + "scripts": { + "start": "node ." + } +} \ No newline at end of file diff --git a/route/index.js b/route/index.js new file mode 100644 index 0000000..45e3670 --- /dev/null +++ b/route/index.js @@ -0,0 +1,15 @@ +'use strict'; + +module.exports = route; + +// Route definition +function route (app) { + app.express.get('/', function (req, res, next) { + app.webservice.tasks.get(function (err, tasks) { + if (err) { + return next(err); + } + res.send(tasks); + }); + }); +} diff --git a/route/new.js b/route/new.js new file mode 100644 index 0000000..17281c4 --- /dev/null +++ b/route/new.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = route; + +// Route definition +function route (app) { + app.express.get('/new', function (req, res) { + res.send('Create a task'); + }); +} diff --git a/route/task.js b/route/task.js new file mode 100644 index 0000000..5dead46 --- /dev/null +++ b/route/task.js @@ -0,0 +1,15 @@ +'use strict'; + +module.exports = route; + +// Route definition +function route (app) { + app.express.get('/:id', function (req, res, next) { + app.webservice.task(req.params.id).get(function (err, task) { + if (err) { + return next(); + } + res.send(task); + }); + }); +}