mirror of
https://github.com/Oreolek/raconteur.git
synced 2024-05-17 00:08:16 +03:00
Add "stringish" functionality to OneOf iterators
This commit is contained in:
parent
c8db44aa9b
commit
6ef13e2094
39
lib/oneOf.js
39
lib/oneOf.js
|
@ -69,36 +69,49 @@ Array.prototype.shuffle = function (system) {
|
|||
consistent randomness.
|
||||
*/
|
||||
|
||||
var oneOf = function (ary) {
|
||||
/*
|
||||
Takes a function and gives it a toString() property that calls itself and
|
||||
returns its value, allowing for ambiguous use of the closure object
|
||||
as a text snippet.
|
||||
|
||||
Returns the modified function.
|
||||
*/
|
||||
var stringish = function (callback) {
|
||||
callback.toString = function () { return '' + this.call() };
|
||||
return callback;
|
||||
}
|
||||
|
||||
var oneOf = function (...ary) {
|
||||
|
||||
return {
|
||||
inOrder () {
|
||||
var i = 0;
|
||||
return function () {
|
||||
return stringish(function () {
|
||||
if (i >= ary.length) return null;
|
||||
return ary[i++];
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
cycling () {
|
||||
var i = 0;
|
||||
return function () {
|
||||
return stringish(function () {
|
||||
if (i >= ary.length) i = 0;
|
||||
return ary[i++];
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
stopping () {
|
||||
var i = 0;
|
||||
return function () {
|
||||
return stringish(function () {
|
||||
if (i >= ary.length) i = ary.length - 1;
|
||||
return ary[i++];
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
randomly (system) {
|
||||
var rng = (system) ? system.random : Math.random,
|
||||
last;
|
||||
return function () {
|
||||
return stringish(function () {
|
||||
var i;
|
||||
|
||||
do {
|
||||
|
@ -107,22 +120,22 @@ var oneOf = function (ary) {
|
|||
|
||||
last = i;
|
||||
return ary[i];
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
trulyAtRandom (system) {
|
||||
var rng = (system) ? system.random : Math.random;
|
||||
return function () {
|
||||
return stringish(function () {
|
||||
return ary[Math.floor(rng() * ary.length)];
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
inRandomOrder (system) {
|
||||
var shuffled = ary.shuffle(system),
|
||||
i = 0;
|
||||
return function () {
|
||||
return stringish(function () {
|
||||
return shuffled[i++];
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue