From f8100160115b15f067f93cf28967a67c982dd03e Mon Sep 17 00:00:00 2001 From: Eran Hammer Date: Tue, 9 Sep 2014 13:48:20 -0700 Subject: [PATCH] revert passing non-cached methods through cache. Closes #1922 --- lib/methods.js | 29 ++++++++++++++++++++++++----- package.json | 2 +- test/methods.js | 26 ++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/lib/methods.js b/lib/methods.js index aed65d226..1160ac7d2 100755 --- a/lib/methods.js +++ b/lib/methods.js @@ -50,20 +50,35 @@ internals.Methods.prototype._add = function (name, fn, options, env) { var settings = Hoek.cloneWithShallow(options, ['bind']); settings.generateKey = settings.generateKey || internals.generateKey; - var bind = settings.bind || (env && env.bind) || null; // Create method - settings.cache = settings.cache || {}; + if (!settings.cache) { + this._assign(name, function (/* arguments, methodNext */) { + + var args = arguments; + var methodNext = args[args.length - 1]; + + var timer = new Hoek.Timer(); + args[args.length - 1] = function (err, result) { + + methodNext(err, result, null, { msec: timer.elapsed(), error: err }); + }; + + fn.apply(bind, args); + }); + + return; + } + settings.cache.generateFunc = function (id, next) { id.args[id.args.length - 1] = next; // function (err, result, ttl) fn.apply(bind, id.args); }; - var cache = (settings.cache.expiresIn || settings.cache.expiresAt ? this.pack._provisionCache(settings.cache, 'method', name, settings.cache.segment) - : new Catbox.Policy(settings.cache)); + var cache = this.pack._provisionCache(settings.cache, 'method', name, settings.cache.segment); var method = function (/* arguments, methodNext */) { @@ -93,7 +108,11 @@ internals.Methods.prototype._add = function (name, fn, options, env) { } }; - // create method path + this._assign(name, method); +}; + + +internals.Methods.prototype._assign = function (name, method) { var path = name.split('.'); var ref = this.methods; diff --git a/package.json b/package.json index 783c6cdb1..4133a434e 100755 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", - "version": "6.8.0", + "version": "6.8.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" diff --git a/test/methods.js b/test/methods.js index c7ed139d2..68b0771eb 100755 --- a/test/methods.js +++ b/test/methods.js @@ -125,6 +125,32 @@ describe('Method', function () { done(); }); + it('calls non cached method multiple times', function (done) { + + var gen = 0; + var method = function (id, next) { + + return next(null, { id: id, gen: gen++ }); + }; + + var server = new Hapi.Server(0); + server.method('test', method); + + server.start(function () { + + server.methods.test(1, function (err, result) { + + expect(result.gen).to.equal(0); + + server.methods.test(1, function (err, result) { + + expect(result.gen).to.equal(1); + done(); + }); + }); + }); + }); + it('reuses cached method value', function (done) { var gen = 0;