Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'master' of git://github.com/nrstott/bogart
  • Loading branch information
Davis Clark committed Nov 14, 2011
2 parents abca9b3 + 2c6a338 commit 75314f0
Show file tree
Hide file tree
Showing 11 changed files with 115 additions and 45 deletions.
3 changes: 2 additions & 1 deletion .npmignore
@@ -1,4 +1,5 @@
*.sublime-*
forEachableStream.txt
npm-debug.log

hello-world.dat
hello-world.txt
13 changes: 13 additions & 0 deletions CHANGES.md
@@ -1,3 +1,16 @@
## v0.3.19

* Updated Parted dependency to 0.8.0.

## v0.3.18

* Mustache partials now work properly when using layouts.

## v0.3.17

* Routes now match in order added instead of longest-first.
* Added `Flash` middleware to emulate the flash method of Rails.

## v0.3.16

* Added `Error` middleware to translate rejected promises and thrown errors into an error response.
Expand Down
19 changes: 1 addition & 18 deletions examples/hello-world.js
Expand Up @@ -4,23 +4,6 @@ var config = function(show, create, update, destroy) {
show('/hello/:name', function(req, name) {
return bogart.html('Hello '+name);
});

show('/stream', function(req) {
var streamer = bogart.stream();

setInterval(function() {
var currentTime = new Date();
streamer(currentTime.getHours()+':'+currentTime.getMinutes()+':'+currentTime.getSeconds()+"\n");
}, 10);

setTimeout(function() {
streamer.end();
}, 10000);

return streamer.respond();
});
};



bogart.start(bogart.router(config), {port:1337});
bogart.start(bogart.router(config));
2 changes: 1 addition & 1 deletion lib/bogart.js
Expand Up @@ -9,7 +9,7 @@ var
fs = require('fs'),
view = require('./view');

exports.version = [0,3,16];
exports.version = [0,3,19];

exports.middleware = middleware;

Expand Down
14 changes: 12 additions & 2 deletions lib/middleware.js
Expand Up @@ -3,7 +3,8 @@ var Q = require('promised-io/lib/promise'),
fs = require('fs'),
path = require('path'),
ForEachStream = require('./forEachStream'),
util = require('./util');
util = require('./util'),
EventEmitter = require('events').EventEmitter;

function join(forEachable) {
var body = '',
Expand Down Expand Up @@ -122,8 +123,17 @@ exports.Parted = function(nextApp, opts) {

return function(req) {
var deferred = Q.defer()
, oldBody = req.body;
, oldBody = req.body
, emitter;

if (oldBody === undefined) {
return nextApp(req);
}

emitter = new ForEachStream(oldBody);

req.on = emitter.on.bind(emitter);

req.pipe = function(stream) {
Q.when(oldBody.forEach(function(chunk) {
stream.write(chunk);
Expand Down
3 changes: 0 additions & 3 deletions lib/router.js
Expand Up @@ -95,9 +95,6 @@ Router.prototype.route = function(method, path, handler) {
this.routes[method] = this.routes[method] || [];
this.routes[method].push(route);

//Longest route is matched first
this.routes[method] = this.routes[method].sort(function(a,b) { return b.originalPath.length - a.originalPath.length; });

this.emit(exports.bogartEvent.AFTER_ADD_ROUTE, this, route);

return this;
Expand Down
22 changes: 14 additions & 8 deletions lib/view.js
Expand Up @@ -7,7 +7,8 @@ var
when = promise.when,
sys = require('sys'),
engines = {},
settings = {};
settings = {},
_ = require('underscore');

// TODO: Figure out how to make this work x-platform using the nodules 'engines' overlay
//watchFile = require('fileWatcher').watchFile;
Expand Down Expand Up @@ -81,13 +82,16 @@ ViewEngine.prototype.render = function(view, opts) {
function success(str) {
var renderedView = renderer(str, opts, self);

if (layout) {
opts.locals.body = renderedView;
opts.layout = false;
return self.render(layout, opts);
}
return when(renderedView, function(renderedView) {
if (layout) {
opts.locals.body = renderedView;
opts.layout = false;

return renderedView;
return self.render(layout, opts);
}

return renderedView;
});
});
};

Expand Down Expand Up @@ -138,6 +142,8 @@ exports.viewEngine.addEngine('mustache', function(str, opts, viewEngine) {
var partialPromises = []
, partials = {}
, viewPath;

opts = _.extend({}, opts);

if (opts.partials) {
for (var k in opts.partials) {
Expand Down Expand Up @@ -166,4 +172,4 @@ var setting = exports.setting = function(key, val) {
}

return settings[key];
};
};
5 changes: 3 additions & 2 deletions package.json
@@ -1,7 +1,7 @@
{
"name": "bogart",
"description": "Fast JSGI web framework taking inspiration from Sinatra",
"version": "0.3.16",
"version": "0.3.19",
"keywords": ["bogart", "framework", "sinatra", "REST"],
"author": "Nathan Stott",
"email": "nathan.stott@whiteboard-it.com",
Expand All @@ -16,8 +16,9 @@
"jsgi": ">=v0.2.2",
"mustache": "0.3.1-dev",
"deflate": ">=1.0.3",
"underscore": ">=0.0.0",
"node-uuid": ">=1.2.0",
"parted": "=0.0.7",
"parted": "=0.0.8",
"q": "=0.7.2"
},
"devDependencies": {
Expand Down
29 changes: 29 additions & 0 deletions test/middleware.test.js
Expand Up @@ -207,6 +207,35 @@ exports["test parted json"] = function(beforeExit) {
});
};

exports["test parted form"] = function(beforeExit) {
var request = null
, parted = new bogart.middleware.Parted(function(req) { request = req; return {}; })
, body = {}
, bodyDefer = require('q').defer();

body.forEach = function(callback) {
callback('hello=one&hello=two');

return bodyDefer.promise;
};

response = parted({
method: 'POST',
env: {},
headers: { 'content-type': 'application/x-www-form-urlencoded' },
body: body
});

bodyDefer.resolve();

beforeExit(function() {
assert.isNotNull(request);
assert.ok(!!request.body);
assert.ok(!!request.body.hello);
assert.equal(2, request.body.hello.length);
});
};

exports["test parted multipart"] = function(beforeExit) {
var request = null
, parted = new bogart.middleware.Parted(function(req) { request = req; return {}; });
Expand Down
31 changes: 28 additions & 3 deletions test/router.test.js
Expand Up @@ -44,6 +44,30 @@ exports['test matches parameter'] = function(beforeExit) {
assert.equal("nathan", name);
});
};
exports['test order of routes matching should be longest to smallest'] = function(){
var
name, req = rootRequest(),
router = bogart.router(function(get) {
get('/hello/:name', function(req) {
name = req.params.name;
assert.ok (false, "should have matched the longest route");
return bogart.html("hello");
});
get("/hello/:name/:something", function(req){
name = req.params.name;
return bogart.html("hello");
assert.ok(true, "long route matched successfully")
})
});

req.pathInfo = '/hello/nathan/';

return when(router(req), function(resp) {
//do nothing
});

};


exports['test should call notFoundApp'] = function(beforeExit) {
var called = false
Expand Down Expand Up @@ -180,11 +204,11 @@ exports['test regex route'] = function(beforeExit) {
, splat
, response;

req.pathInfo = '/hello/world';
req.pathInfo = '/hello/cruel/world';

router = bogart.router();

router.get(/\/hello\/(.*)/, function(req) {
router.get(/\/hello\/(.*)\/(.*)/, function(req) {
splat = req.params.splat;
return bogart.html("hello");
});
Expand All @@ -197,7 +221,8 @@ exports['test regex route'] = function(beforeExit) {
assert.isNotNull(response);
assert.equal(200, response.status);
assert.ok(splat, "Should have set 'splat'");
assert.equal(splat[0], 'world');
assert.equal(splat[0], 'cruel');
assert.equal(splat[1], 'world');
});
};

Expand Down
19 changes: 12 additions & 7 deletions test/server.test.js
@@ -1,6 +1,6 @@
var bogart = require('../lib/bogart')
, Q = require('promised-io/lib/promise')
, when = Q.when
, q = require('promised-io/lib/promise')
, when = q.when
, assert = require('assert')
, jsgi = require('jsgi')
, rootRequest = {
Expand All @@ -11,8 +11,9 @@ var bogart = require('../lib/bogart')
env: {}
};

exports["test should have middleware"] = function() {
var server = new bogart.build(function() {
exports["test should have middleware"] = function(beforeExit) {
var response = null
, server = new bogart.build(function() {
this.use(function(nextApp) {
return function(req) {
return when(nextApp(req), function(resp) {
Expand All @@ -33,8 +34,12 @@ exports["test should have middleware"] = function() {
});
});

var resp = server(rootRequest);
when(server(rootRequest), function(resp) {
response = resp;
});

assert.ok(resp.headers);
assert.equal("xyz", resp.headers["custom-header"]);
beforeExit(function() {
assert.ok(response.headers);
assert.equal("xyz", response.headers["custom-header"]);
});
};

0 comments on commit 75314f0

Please sign in to comment.