Skip to content

Commit

Permalink
Add optional delim argument
Browse files Browse the repository at this point in the history
This is useful for parsing/stringifying cookie values.
  • Loading branch information
mjackson committed Aug 7, 2014
1 parent eda63da commit a381a4b
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 7 deletions.
18 changes: 14 additions & 4 deletions lib/parse.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,21 @@ var Utils = require('./utils');
// Declare internals

var internals = {
delim: '&',
depth: 5,
arrayLimit: 20,
parametersLimit: 1000
};


internals.parseValues = function (str) {
internals.parseValues = function (str, delim) {

if (typeof delim === 'undefined') {
delim = internals.delim;
}

var obj = {};
var parts = str.split('&').slice(0, internals.parametersLimit);
var parts = str.split(delim, internals.parametersLimit);

for (var i = 0, il = parts.length; i < il; ++i) {
var part = parts[i];
Expand Down Expand Up @@ -124,7 +129,7 @@ internals.parseKeys = function (key, val, depth) {
};


module.exports = function (str, depth) {
module.exports = function (str, depth, delim) {

if (str === '' ||
str === null ||
Expand All @@ -133,7 +138,12 @@ module.exports = function (str, depth) {
return {};
}

var tempObj = typeof str === 'string' ? internals.parseValues(str) : Utils.clone(str);
if (typeof depth !== 'number') {
delim = depth;
depth = internals.depth;
}

var tempObj = typeof str === 'string' ? internals.parseValues(str, delim) : Utils.clone(str);
var obj = {};

// Iterate over the keys and setup the new object
Expand Down
12 changes: 9 additions & 3 deletions lib/stringify.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

// Declare internals

var internals = {};
var internals = {
delim: '&'
};


internals.stringify = function (obj, prefix) {
Expand Down Expand Up @@ -37,7 +39,11 @@ internals.stringify = function (obj, prefix) {
};


module.exports = function (obj) {
module.exports = function (obj, delim) {

if (typeof delim === 'undefined') {
delim = internals.delim;
}

var keys = [];

Expand All @@ -47,5 +53,5 @@ module.exports = function (obj) {
}
}

return keys.join('&');
return keys.join(delim);
};
6 changes: 6 additions & 0 deletions test/parse.js
Original file line number Diff line number Diff line change
Expand Up @@ -240,4 +240,10 @@ describe('#parse', function () {
delete Object.prototype.crash;
done();
});

it('parses a string with an alternative delimiter', function (done) {

expect(Qs.parse('a=b;c=d', ';')).to.deep.equal({ a: 'b', c: 'd' });
done();
});
});
6 changes: 6 additions & 0 deletions test/stringify.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,4 +120,10 @@ describe('#stringify', function () {
expect(Qs.stringify({ a: { b: new Buffer('test') } })).to.equal('a%5Bb%5D=test');
done();
});

it('stringifies an object using an alternative delimiter', function (done) {

expect(Qs.stringify({ a: 'b', c: 'd' }, ';')).to.equal('a=b;c=d');
done();
});
});

0 comments on commit a381a4b

Please sign in to comment.