bizzfuzz
Version:
Extendable FizzBuzz Library in Javascript (LOL)
52 lines (41 loc) • 1.5 kB
JavaScript
var _ = require('underscore'),
defaultOptions = require('./options');
module.exports = BizzFuzz = function(newOptions) {
this.options = _.extend({}, defaultOptions, newOptions);
}
BizzFuzz.prototype.valueFor = function(num) {
var options = this.options,
firstNumberTest = this.options.firstNumberTest,
secondNumberTest = this.options.secondNumberTest;
// Equivalent to "When divisible by 3 and 5, display BizzFuzz"
if (firstNumberTest(num, options.firstNumber) && secondNumberTest(num, options.secondNumber)) {
return options.bothSuccess;
}
// Equivalent to "When divisible by 3, display fizz"
if (firstNumberTest(num, options.firstNumber)) {
return options.firstTestSuccess;
}
// Equivalent to "When divisible by 5, display buzz"
if (secondNumberTest(num, options.secondNumber)) {
return options.secondTestSuccess;
}
// Equivalent to "When not divisible by 3 or 5, display the number"
return options.noSuccess(num);
}
BizzFuzz.prototype.nextAfter = function(num) {
if (num === this.options.endsAt) return -1;
return num + this.options.add;
}
BizzFuzz.prototype.isNextAfter = function(num) {
var nextNumber = this.nextAfter(num);
return (nextNumber === -1) ? false : true;
}
BizzFuzz.prototype.startingValue = function() {
return this.valueFor(this.options.startsAt);
}
BizzFuzz.prototype.startingNumber = function() {
return this.options.startsAt;
}
BizzFuzz.prototype.finalNumber = function() {
return this.options.endsAt;
}