diff --git a/lib/cradle/response.js b/lib/cradle/response.js index acbe094..73f46d9 100644 --- a/lib/cradle/response.js +++ b/lib/cradle/response.js @@ -100,7 +100,14 @@ this.basePrototype = { this.collectionPrototype = { forEach: function (f) { for (var i = 0, value; i < this.length; i++) { - value = this[i].doc || this[i].json || this[i].value || this[i]; + value = this[i].doc; + if (value === undefined) + value = this[i].json; + if (value === undefined) + value = this[i].value; + if (value === undefined) + value = this[i]; + if (f.length === 1) { f.call(this[i], value); } else { diff --git a/test/response-test.js b/test/response-test.js index 751c043..0cebabf 100644 --- a/test/response-test.js +++ b/test/response-test.js @@ -7,6 +7,7 @@ var path = require('path'), var cradle = require('../lib/cradle'); var document = { _rev: '2-76be', _id: 'f6av8', name: 'buzz', age: 99 }; +var view = { rows: [ { key: 'key1', value: 10 }, { key: 'key2', value: 0 }, { key: 'key3', value: false } ] }; vows.describe('cradle/response').addBatch({ 'A cradle.Response instance': { @@ -66,6 +67,31 @@ vows.describe('cradle/response').addBatch({ assert.equal(json.hair, 'blue'); } } + }, + 'from a view': { + topic: new(cradle.Response)(view), + + 'should correctly handle rows with falsy values in iterator': function (topic) { + var values = topic.toArray(); + + assert.lengthOf(values, 3); + + for (var i=0; i < values.length; i++) + { + var value = values[i]; + switch (i) { + case 0: + assert.equal(value, 10); + break; + case 1: + assert.equal(value, 0); + break; + case 2: + assert.equal(value, false); + break; + } + } + } } } }).export(module);