From a2674d45efc39afab796f658fbaee48fe8c69005 Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Fri, 30 Aug 2013 18:54:47 -0400 Subject: [PATCH] initial commit --- .gitignore | 3 ++ Makefile | 17 ++++++++ README.md | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++ index.js | 1 + lib/index.js | 0 package.json | 27 +++++++++++++ 6 files changed, 158 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 index.js create mode 100644 lib/index.js create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9de9b70 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +lib-cov +coverage.html diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..36b9b41 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +MOCHA_OPTS = --check-leaks +REPORTER = spec + +clean: + @rm -f coverage.html + @rm -rf lib-cov + +test: + @NODE_ENV=test ./node_modules/.bin/mocha --ui tdd --reporter $(REPORTER) $(MOCHA_OPTS) + +test-cov: lib-cov + @YAPS_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html + +lib-cov: + @./node_modules/.bin/jscoverage lib lib-cov + +.PHONY: clean lib-cov test test-cov diff --git a/README.md b/README.md new file mode 100644 index 0000000..c8d6e49 --- /dev/null +++ b/README.md @@ -0,0 +1,110 @@ +Yet Another Plugin Server +========================= + +YAPS is plugin based HTTP server that gets out of your way and lets you do what you need to do. + +## Installation +### Via NPM +```bash +npm install [-g] yaps +``` + +### Via Git +```bash +git clone git://github.com/brettlangdon/yaps.git +cd ./yaps +npm install +``` + +## Usage +```javascript +var yaps = require("yaps"); +var user_auth = require("user_auth"); +var user_routes = require("user_routes"); +var admin_routes = require("admin_routes"); + +// create instance of yaps application +var server = new yaps({ + bind: "0.0.0.0:8000", +}); + +// register each plugin +server.registerPlugin(user_auth); +server.registerPlugin(user_routes); +server.registerPlugin(admin_routes); + +// start the server listening at http://0.0.0.0:8000 +server.start(); +``` + +## Writing Plugins +Plugins are meant to be a small contained representation of a portion of your application. +This way you can easily package and move portions of your application around. + +### Example +```javascript +var yaps = require("yaps"); + +var plugin = function(){ + this.addRoute("GET", "/test", this.handle_test); + // OR + this.GET("/test", this.handle_test); + + // this handler gets called for every new request + this.on("request", this.request_setup); + + // for when there isn't a handler that responds to the request, call this + this.on("not-found", this.not_found); +}; + +// `request` is the current request +// `server` is the current yaps instance +// `respond` is a function which must be called by each handler +plugin.prototype.handle_test = function(request, server, respond){ + if(server.some.setting >= 200){ + // this passes execution to the next handler for this route + respond(null); + } else{ + // this interrupts the handler chain and returns to the user + respond(200, "Thanks for visiting /test", { + extra_header: "used /test", + }); + } +}; + +plugin.prototype.request_setup = function(request, server, done){ + // do some setup stuff here, like setup sessions or do auth + done(); +}; + +var server = new yaps({ + bind: "0.0.0.0:8000", +}); +server.registerPlugin(plugin); +server.start(); +``` + +## License +``` +The MIT License (MIT) + +Copyright (c) 2013 Brett Langdon (http://www.brett.is) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +``` diff --git a/index.js b/index.js new file mode 100644 index 0000000..b958cd5 --- /dev/null +++ b/index.js @@ -0,0 +1 @@ +module.exports = process.env.YAPS_COV ? require("./lib-cov") : require("./lib"); diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..e69de29 diff --git a/package.json b/package.json new file mode 100644 index 0000000..38a42c4 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "author": "Brett Langdon (http://brett.is)", + "bugs": { + "url": "https://github.com/brettlangdon/yaps/issues" + }, + "description": "Yet Another Plugin Server", + "devDependencies": { + "jscoverage": "~0.3.8", + "mocha": "~1.12.1" + }, + "keywords": [ + "http", + "plugin", + "server" + ], + "license": "MIT", + "main": "index.js", + "name": "yaps", + "repository": { + "type": "git", + "url": "git://github.com/brettlangdon/yaps.git" + }, + "scripts": { + "test": "make test" + }, + "version": "0.1.0" +}