Skip to content

Commit

Permalink
Merge pull request hapijs#420 from walmartlabs/user/eran
Browse files Browse the repository at this point in the history
Goodies
  • Loading branch information
geek committed Jan 28, 2013
2 parents aed392f + 56a1aeb commit 001d8ff
Show file tree
Hide file tree
Showing 15 changed files with 873 additions and 419 deletions.
3 changes: 1 addition & 2 deletions lib/proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ internals.Proxy.prototype.handler = function () {
var isGet = (request.method === 'get' || request.method === 'head');

if (self.settings.isCustomPostResponse || // Custom response method
(isGet && request._route && request._route.cache.isMode('server'))) { // GET/HEAD with Cache
(isGet && request._route.cache.isMode('server'))) { // GET/HEAD with Cache

// Callback interface

Expand Down Expand Up @@ -104,7 +104,6 @@ internals.Proxy.prototype.handler = function () {
});

if (!isGet &&
request._route &&
request._route.config.payload === 'stream') {

request.raw.req.pipe(reqStream);
Expand Down
71 changes: 29 additions & 42 deletions lib/request.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,7 @@ exports = module.exports = internals.Request = function (server, req, res, optio
// setUrl()
// setMethod()

// reply(): { payload(), stream() }
// close()
// reply(): { payload(), stream(), redirect(), view() }

// Semi-public members

Expand All @@ -74,7 +73,6 @@ exports = module.exports = internals.Request = function (server, req, res, optio

this._route = null;
this._response = null;
this._isResponded = false;
this._log = [];
this._analytics = {
startTime: now
Expand All @@ -96,10 +94,10 @@ exports = module.exports = internals.Request = function (server, req, res, optio

// Apply options

if (options) {
if (options.session) {
this.session = options.session;
}
if (options &&
options.session) {

this.session = options.session;
}

// Log request
Expand Down Expand Up @@ -260,6 +258,8 @@ internals.Request.prototype._execute = function (route) {
},
function (err) {

// Error exit

if (err) {
if (self._response &&
self._response instanceof Error === false) {
Expand All @@ -275,11 +275,22 @@ internals.Request.prototype._execute = function (route) {
self._response = self._generateResponse(err);
}

self._respond();
// Send response

Response._respond(self._response, self, function () {

Utils.executeRequestHandlers(self.server.settings.ext.onPostRoute, self, function () {
self.server.emit('response', self);

Utils.executeRequestHandlers(self.server.settings.ext.onPostRoute, self, function () {

self._wagTail();
self._isWagging = true;
delete self.addTail;

if (Object.keys(self._tails).length === 0) {
self.log(['tail', 'empty']);
self.server.emit('tail', self);
}
});
});
});
};
Expand Down Expand Up @@ -336,13 +347,13 @@ internals.Request.prototype._decorate = function (callback) {

var process = function () {

self._undecorate();
delete this.reply;
return callback(response);
};

this.reply = function (result) {

Utils.assert(result instanceof Stream === false || !self._route || !self._route.cache.isMode('server'), 'Cannot reply using a stream when caching enabled');
Utils.assert(result instanceof Stream === false || !self._route.cache.isMode('server'), 'Cannot reply using a stream when caching enabled');
response = self._generateResponse(result);
process();
};
Expand Down Expand Up @@ -371,6 +382,12 @@ internals.Request.prototype._decorate = function (callback) {
return response;
};

this.reply.raw = function (result) {

response = self._generateResponse(new Response.Raw(self), process);
return response;
};

this.reply.redirect = function (uri) {

response = self._generateResponse(new Response.Redirection(uri), process);
Expand All @@ -387,12 +404,6 @@ internals.Request.prototype._decorate = function (callback) {
};


internals.Request.prototype._undecorate = function () {

delete this.reply;
};


internals.Request.prototype._prerequisites = function (next) {

var self = this;
Expand Down Expand Up @@ -518,20 +529,6 @@ internals.handler = function (request, next) {
};


internals.Request.prototype._respond = function () {

var self = this;

Response._respond(this._response, this, function () {

if (!self._isResponded) {
self.server.emit('response', self);
self._isResponded = true;
}
});
};


internals.Request.prototype._addTail = function (name) {

var self = this;
Expand Down Expand Up @@ -572,13 +569,3 @@ internals.Request.prototype.removeTail = function (dropFunc) {
};


internals.Request.prototype._wagTail = function () {

this._isWagging = true;
delete this.addTail;

if (Object.keys(this._tails).length === 0) {
this.log(['tail', 'empty']);
this.server.emit('tail', this);
}
};
137 changes: 0 additions & 137 deletions lib/response/direct.js

This file was deleted.

14 changes: 9 additions & 5 deletions lib/response/generic.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,16 @@ NodeUtil.inherits(internals.Generic, Base);

internals.Generic.prototype._prepare = function (request, callback) {

var error = Headers.state(this, request);
if (error) {
return callback(error);
}
var self = this;

Headers.state(this, request, function (err) {

if (err) {
return callback(err);
}

return callback(this);
return callback(self);
});
};


Expand Down
39 changes: 21 additions & 18 deletions lib/response/headers.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,20 @@ exports.cache = function (response, request) {

// Check policy

if (request._route) {
if (request._route.cache.isMode('client')) {
if (ttl === null || ttl === undefined) {
ttl = request._route.cache.ttl();
}
}
else {
ttl = 0;
if (request._route.cache.isMode('client')) {
if (ttl === null || ttl === undefined) {
ttl = request._route.cache.ttl();
}
}
else {
ttl = 0;
}

// Set header

if (ttl) {
response.header('Cache-Control', 'max-age=' + Math.floor(ttl / 1000) + ', must-revalidate');
var privacy = request._route.cache.rule.privacy;
response.header('Cache-Control', 'max-age=' + Math.floor(ttl / 1000) + ', must-revalidate' + (privacy !== 'default' ? ', ' + privacy : ''));
}
else {
response.header('Cache-Control', 'no-cache');
Expand All @@ -39,7 +38,7 @@ exports.cache = function (response, request) {
exports.cors = function (response, request) {

if (request.server.settings.cors &&
(!request._route || request._route.config.cors !== false)) {
request._route.config.cors !== false) {

response.header('Access-Control-Allow-Origin', request.server.settings.cors._origin);
response.header('Access-Control-Max-Age', request.server.settings.cors.maxAge);
Expand All @@ -60,16 +59,20 @@ exports.location = function (uri, request) {
};


exports.state = function (response, request) {
exports.state = function (response, request, callback) {

if (!response._states.length) {
return;
return callback();
}

var setCookie = State.generateSetCookieHeader(response._states, request.server._stateDefinitions);
if (setCookie instanceof Error) {
return setCookie;
}
State.generateSetCookieHeader(response._states, request.server._stateDefinitions, function (err, header) {

if (err) {
return callback(err);
}

response.header('Set-Cookie', header);
return callback();
});
};

response.header('Set-Cookie', setCookie);
};
Loading

0 comments on commit 001d8ff

Please sign in to comment.