Skip to content

Commit

Permalink
Merge pull request hapijs#93 from thegoleffect/develop
Browse files Browse the repository at this point in the history
fix error on subsequent url accesses for queryval
  • Loading branch information
Eran Hammer-Lahav committed Aug 22, 2012
2 parents 9171d4f + 8f34854 commit dd48eb6
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 35 deletions.
1 change: 1 addition & 0 deletions examples/config/validation.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ internals.main = function () {
http.addRoutes([{ method: 'GET', path: '/users', config: { handler: internals.get, query: {email: S().email().required().min(18)} } }]);
http.addRoutes([{ method: 'GET', path: '/config', config: { handler: internals.get, query: { choices: A().required() } } }]);
http.addRoutes([{ method: 'GET', path: '/test', config: { handler: internals.get, query: {num: N().min(0)} } }]);
http.addRoutes([{ method: 'GET', path: '/test2', config: { handler: internals.get, query: {p1: S().required().rename('itemId')}}}]);

// Start Hapi servers

Expand Down
10 changes: 6 additions & 4 deletions lib/types/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,13 +172,15 @@ BaseType.prototype._renameDefaultOptions = {
BaseType.prototype._rename = function(to, options) {

var self = this;
self.renamed = self.renamed || {};

options = Utils.merge(Utils.clone(this._renameDefaultOptions), options);

return function(value, qstr, key) {
return function(value, qstr, key, req) {

req = req || {};
var renamed = req._renamed || {};

if (options.allowMult === false && to in self.renamed) {
if (options.allowMult === false && to in renamed) {

return false;
}
Expand All @@ -197,7 +199,7 @@ BaseType.prototype._rename = function(to, options) {

if (options.allowMult === false) {

self.renamed[to] = self.renamed[to]++ || 1;
renamed[to] = renamed[to]++ || 1;
}

key = to;
Expand Down
10 changes: 7 additions & 3 deletions lib/validation.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ exports.param = function (key, type, req, validator) {
value = converter(value);
}

var result = validator(value, req.query, key);
var result = validator(value, req.query, key, req);
return result;
}

Expand All @@ -43,7 +43,7 @@ exports.query = function (request, config, next) {
var isInvalid = false;
var invalidParam = null;
var finalizeFns = [];
var completed = {};
request._renamed = {};

for(var i in params) {

Expand All @@ -70,16 +70,20 @@ exports.query = function (request, config, next) {

for (var l in finalizeFns) {

// console.log(key, config.query[key].type, request.query)
var result = exports.param(key, config.query[key].type, request, validators[j]);
if (result === false) {

isInvalid = true;
invalidParam = key + " = " + request.query[key];
invalidParam = "error on renaming " + key + " = " + request.query[key];
break;
}
}
}

delete request._renamed;
// console.log("reset renamed")

// Handle inputs that haven't been defined in query config
var processed = Object.keys(submitted);
if (processed.length > 0) {
Expand Down
56 changes: 28 additions & 28 deletions test/unit/types/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,37 +5,37 @@ var Utils = require("../../../lib/utils");

describe("BaseType", function(){
describe("#_required", function(){
// it('should return true for if input is given and required', function(done){
// var base = new BaseType();
// var result = base._required(true)("walmart");
// should.exist(result);
// result.should.equal(true)
// done();
// })
it('should return true for if input is given and required', function(done){
var base = new BaseType();
var result = base._required(true)("walmart");
should.exist(result);
result.should.equal(true)
done();
})

// it('should return true if input is given but not required', function(done){
// var base = new BaseType();
// var result = base._required(false)("walmart");
// should.exist(result);
// result.should.equal(true);
// done();
// })
it('should return true if input is given but not required', function(done){
var base = new BaseType();
var result = base._required(false)("walmart");
should.exist(result);
result.should.equal(true);
done();
})

// it('should return false if input is not given but required', function(done){
// var base = new BaseType();
// var result = base._required(true)();
// should.exist(result);
// result.should.equal(false);
// done();
// })
it('should return false if input is not given but required', function(done){
var base = new BaseType();
var result = base._required(true)();
should.exist(result);
result.should.equal(false);
done();
})

// it('should return true if input is not given and not required', function(done){
// var base = new BaseType();
// var result = base._required(false)();
// should.exist(result);
// result.should.equal(true);
// done();
// })
it('should return true if input is not given and not required', function(done){
var base = new BaseType();
var result = base._required(false)();
should.exist(result);
result.should.equal(true);
done();
})
})

describe("#_rename", function(){
Expand Down

0 comments on commit dd48eb6

Please sign in to comment.