diff --git a/spec/javascripts/query.spec.js b/spec/javascripts/query.spec.js index 35166ba..7662cf3 100644 --- a/spec/javascripts/query.spec.js +++ b/spec/javascripts/query.spec.js @@ -1,4 +1,28 @@ describe("Query", function() { + + describe('Construction', function() { + + it('should include an equal sign if there was one present without a query value', function() { + q = new Query('?11='); + expect(q.toString()).toEqual('?11='); + }); + + it('should not include an equal sign if one was not present originally', function() { + q = new Query('?11'); + expect(q.toString()).toEqual('?11'); + }); + + it('should preserve missing equals signs across many keys', function() { + q = new Query('?11&12&13&14'); + expect(q.toString()).toEqual('?11&12&13&14'); + }); + + it('should preserve missing equals signs in a mixed scenario', function() { + q = new Query('?11=eleven&12=&13&14=fourteen'); + expect(q.toString()).toEqual('?11=eleven&12=&13&14=fourteen'); + }); + + }); describe("Manipulation", function() { var q; @@ -117,5 +141,7 @@ describe("Query", function() { q = new Query('?multi+word=true').replaceParam('multi word', 2); expect(q.toString()).toEqual('?multi word=2'); }); + + }); }); diff --git a/src/query.js b/src/query.js index 4198929..69494ab 100644 --- a/src/query.js +++ b/src/query.js @@ -7,7 +7,7 @@ var Query = function (queryString) { var // parseQuery(q) parses the uri query string and returns a multi-dimensional array of the components parseQuery = function (q) { - var arr = [], i, ps, p, keyval; + var arr = [], i, ps, p, kvp, k, v; if (typeof (q) === 'undefined' || q === null || q === '') { return arr; @@ -21,8 +21,10 @@ var Query = function (queryString) { for (i = 0; i < ps.length; i++) { p = ps[i]; - keyval = p.split('='); - arr.push([keyval[0], keyval[1]]); + kvp = p.split('='); + k = kvp[0]; + v = p.indexOf('=') === -1 ? null : (kvp[1] === null ? '' : kvp[1]); + arr.push([k, v]); } return arr; @@ -38,7 +40,12 @@ var Query = function (queryString) { if (s.length > 0) { s += '&'; } - s += param.join('='); + if (param[1] === null) { + s += param[0]; + } + else { + s += param.join('='); + } } return s.length > 0 ? '?' + s : s; },