From 4f1101fe4bc950f207d720f572916d85b6e5baed Mon Sep 17 00:00:00 2001 From: Andrew Gibb Date: Tue, 21 Jul 2015 14:17:45 +1000 Subject: [PATCH] Fixing isArrayLike to allow length as a param. Added test --- lib/utils.js | 12 +++++++++++- test/specs/helpers/buildUrl.spec.js | 8 ++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/utils.js b/lib/utils.js index 651b7ff..3123b41 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -130,6 +130,16 @@ function trim(str) { return str.replace(/^\s*/, '').replace(/\s*$/, ''); } +/** + * Determine if a value is an Arguments object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Arguments object, otherwise false + */ +function isArguments(val) { + return toString.call(val) === '[object Arguments]'; +} + /** * Iterate over an Array or an Object invoking a function for each item. * @@ -149,7 +159,7 @@ function forEach(obj, fn) { } // Check if obj is array-like - var isArrayLike = isArray(obj) || (typeof obj === 'object' && !isNaN(obj.length)); + var isArrayLike = isArray(obj) || isArguments(obj); // Force an array if not already something iterable if (typeof obj !== 'object' && !isArrayLike) { diff --git a/test/specs/helpers/buildUrl.spec.js b/test/specs/helpers/buildUrl.spec.js index 4b4bd01..6bcaed0 100644 --- a/test/specs/helpers/buildUrl.spec.js +++ b/test/specs/helpers/buildUrl.spec.js @@ -44,5 +44,13 @@ describe('helpers::buildUrl', function () { bar: 'baz' })).toEqual('/foo?foo=bar&bar=baz'); }); + + it('should support "length" parameter', function () { + expect(buildUrl('/foo', { + query: 'bar', + start: 0, + length: 5 + })).toEqual('/foo?query=bar&start=0&length=5'); + }); });