Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions src/prototype/lang/enumerable.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* objects that act as collections of values. It is a cornerstone of
* Prototype.
*
* [[Enumerable]] is a _mixin_: a set of methods intended not for standaone
* [[Enumerable]] is a _mixin_: a set of methods intended not for standalone
* use, but for incorporation into other objects.
*
* Prototype mixes [[Enumerable]] into several classes. The most visible cases
Expand Down Expand Up @@ -185,7 +185,7 @@ var Enumerable = (function() {
function all(iterator, context) {
iterator = iterator || Prototype.K;
var result = true;
this.each(function(value, index) {
each.call(this, function(value, index) {
result = result && !!iterator.call(context, value, index);
if (!result) throw $break;
});
Expand Down Expand Up @@ -217,7 +217,7 @@ var Enumerable = (function() {
function any(iterator, context) {
iterator = iterator || Prototype.K;
var result = false;
this.each(function(value, index) {
each.call(this, function(value, index) {
if (result = !!iterator.call(context, value, index))
throw $break;
});
Expand Down Expand Up @@ -250,7 +250,7 @@ var Enumerable = (function() {
function collect(iterator, context) {
iterator = iterator || Prototype.K;
var results = [];
this.each(function(value, index) {
each.call(this, function(value, index) {
results.push(iterator.call(context, value, index));
});
return results;
Expand All @@ -273,7 +273,7 @@ var Enumerable = (function() {
**/
function detect(iterator, context) {
var result;
this.each(function(value, index) {
each.call(this, function(value, index) {
if (iterator.call(context, value, index)) {
result = value;
throw $break;
Expand All @@ -298,7 +298,7 @@ var Enumerable = (function() {
**/
function findAll(iterator, context) {
var results = [];
this.each(function(value, index) {
each.call(this, function(value, index) {
if (iterator.call(context, value, index))
results.push(value);
});
Expand Down Expand Up @@ -343,7 +343,7 @@ var Enumerable = (function() {
if (Object.isString(filter))
filter = new RegExp(RegExp.escape(filter));

this.each(function(value, index) {
each.call(this, function(value, index) {
if (filter.match(value))
results.push(iterator.call(context, value, index));
});
Expand Down Expand Up @@ -374,7 +374,7 @@ var Enumerable = (function() {
if (this.indexOf(object) != -1) return true;

var found = false;
this.each(function(value) {
each.call(this, function(value) {
if (value == object) {
found = true;
throw $break;
Expand Down Expand Up @@ -448,7 +448,7 @@ var Enumerable = (function() {
* // -> 'ace'
**/
function inject(memo, iterator, context) {
this.each(function(value, index) {
each.call(this, function(value, index) {
memo = iterator.call(context, memo, value, index);
});
return memo;
Expand Down Expand Up @@ -513,7 +513,7 @@ var Enumerable = (function() {
function max(iterator, context) {
iterator = iterator || Prototype.K;
var result;
this.each(function(value, index) {
each.call(this, function(value, index) {
value = iterator.call(context, value, index);
if (result == null || value >= result)
result = value;
Expand Down Expand Up @@ -553,7 +553,7 @@ var Enumerable = (function() {
function min(iterator, context) {
iterator = iterator || Prototype.K;
var result;
this.each(function(value, index) {
each.call(this, function(value, index) {
value = iterator.call(context, value, index);
if (result == null || value < result)
result = value;
Expand Down Expand Up @@ -591,7 +591,7 @@ var Enumerable = (function() {
function partition(iterator, context) {
iterator = iterator || Prototype.K;
var trues = [], falses = [];
this.each(function(value, index) {
each.call(this, function(value, index) {
(iterator.call(context, value, index) ?
trues : falses).push(value);
});
Expand All @@ -613,7 +613,7 @@ var Enumerable = (function() {
**/
function pluck(property) {
var results = [];
this.each(function(value) {
each.call(this, function(value) {
results.push(value[property]);
});
return results;
Expand All @@ -635,7 +635,7 @@ var Enumerable = (function() {
**/
function reject(iterator, context) {
var results = [];
this.each(function(value, index) {
each.call(this, function(value, index) {
if (!iterator.call(context, value, index))
results.push(value);
});
Expand Down
29 changes: 27 additions & 2 deletions test/unit/enumerable_test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
function prime(value) {
for (var i = 2; i < value; i++)
for (var i = 2; i <= value/2; i++)
if (value % i == 0) return false;
return true;
}
Expand Down Expand Up @@ -267,5 +267,30 @@ new Test.Unit.Runner({
this.assertEqual(4, Fixtures.Nicknames.size());
this.assertEqual(26, Fixtures.Primes.size());
this.assertEqual(0, [].size());
},

testAfterEachReplacing: function() {
Array.prototype.each = Array.prototype.forEach;
var basicArray = Fixtures.Basic;
var check = function(value) {
return value === basicArray[1];
};
this.assert(!basicArray.all(check));
this.assert(!basicArray.every(check));
this.assert(basicArray.any(check));
this.assert(basicArray.some(check));
this.assert(basicArray.some(check));
this.assertEnumEqual([false, true, false], basicArray.collect(check));
this.assertEnumEqual([false, true, false], basicArray.map(check));
this.assertEqual(2, basicArray.detect(check));
this.assertEnumEqual([2], basicArray.findAll(check));
this.assertEnumEqual([2], basicArray.select(check));
this.assertEnumEqual([2], basicArray.filter(check));
this.assertEnumEqual([2], basicArray.grep(/2/));
this.assert(basicArray.include(2));
this.assert(basicArray.member(2));
this.assertEqual(1, basicArray.min());
this.assertEqual(3, basicArray.max());
this.assertEnumEqual([1, 3], basicArray.reject(check));
}
});
});