Skip to content

Commit

Permalink
Merge f69fba2 into 04267a6
Browse files Browse the repository at this point in the history
  • Loading branch information
jcready committed Mar 22, 2016
2 parents 04267a6 + f69fba2 commit e712fdf
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 8 deletions.
5 changes: 5 additions & 0 deletions HISTORY.md
@@ -1,3 +1,8 @@
unreleased
==========

* No longer return `-1` if at least one of the specified ranges is valid

1.0.3 / 2015-10-29
==================

Expand Down
15 changes: 8 additions & 7 deletions index.js
Expand Up @@ -23,12 +23,11 @@ module.exports = rangeParser;
*/

function rangeParser(size, str) {
var valid = true;
var i = str.indexOf('=');

if (-1 == i) return -2;

var arr = str.slice(i + 1).split(',').map(function(range){
var arr = str.slice(i + 1).split(',').reduce(function(memo, range){
var range = range.split('-')
, start = parseInt(range[0], 10)
, end = parseInt(range[1], 10);
Expand All @@ -49,15 +48,17 @@ function rangeParser(size, str) {
if (isNaN(start)
|| isNaN(end)
|| start > end
|| start < 0) valid = false;
|| start < 0) return memo;

return {
memo.push({
start: start,
end: end
};
});
});

return memo;
}, []);

arr.type = str.slice(0, i);

return valid ? arr : -1;
return arr.length ? arr : -1;
}
11 changes: 10 additions & 1 deletion test/range-parser.js
Expand Up @@ -7,8 +7,10 @@ describe('parseRange(len, str)', function(){
assert.strictEqual(parse(200, 'malformed'), -2)
})

it('should return -1 for invalid range', function(){
it('should return -1 if all specified ranges are invalid', function(){
assert.strictEqual(parse(200, 'bytes=500-20'), -1)
assert.strictEqual(parse(200, 'bytes=500-999'), -1)
assert.strictEqual(parse(200, 'bytes=500-999,1000-1499'), -1)
})

it('should parse str', function(){
Expand Down Expand Up @@ -74,6 +76,13 @@ describe('parseRange(len, str)', function(){
assert.deepEqual(range[0], { start: 40, end: 80 })
assert.deepEqual(range[1], { start: 999, end: 999 })
})

it('should omit any invalid ranges if at least one is valid', function(){
var range = parse(200, 'bytes=0-499,500-999')
assert.strictEqual(range.type, 'bytes')
assert.strictEqual(range.length, 1)
assert.deepEqual(range[0], { start: 0, end: 199 })
})

it('should parse non-byte range', function(){
var range = parse(1000, 'items=0-5')
Expand Down

0 comments on commit e712fdf

Please sign in to comment.