<cfcomponent output="false">
<cfscript>
this.COUNTUP = 1;
this.COUNTDOWN = 0;
instance = StructNew();
instance.delimiter = "";
instance.direction = 1;
instance.endNum = 0;
instance.startNum = 0;
</cfscript>
<cffunction name="init" output="false" access="public">
<cfargument name="startNum" required="true" />
<cfargument name="endNum" required="true" />
<cfargument name="direction" default="-1" />
<cfscript>
setStartNum(arguments.startNum);
setEndNum(arguments.endNum);
if (arguments.direction EQ -1) {
if (arguments.startNum LTE arguments.endNum) {
setCountUp();
} else {
setCountDown();
}
} else {
setDirection(arguments.direction);
}
</cfscript>
<cfreturn this />
</cffunction>
<cffunction name="run" output="false" access="public">
<cfscript>
var output = "";
var i = 0;
var start = getStartNum();
var end = getEndNum();
var doAbs = false;
if (getEndNum() LTE getStartNum()) {
start = start * -1;
end = end * -1;
}
for (i=start; i LTE end; i++) {
output &= IIf(doAbs, Abs(i), i);
if (hasDelimiter() AND i LT end) {
output &= getDelimiter();
}
}
</cfscript>
<cfreturn output />
</cffunction>
<!--- Getters/Setters --->
<cffunction name="getDirection" output="false" access="public">
<cfreturn instance.direction />
</cffunction>
<cffunction name="setDirection" output="false" access="public">
<cfargument name="direction" required="true" />
<cfset instance.direction = arguments.direction />
</cffunction>
<cffunction name="getEndNum" output="false" access="public">
<cfreturn instance.endNum />
</cffunction>
<cffunction name="setEndNum" output="false" access="public">
<cfargument name="endNum" required="true" />
<cfset instance.endNum = arguments.endNum />
</cffunction>
<cffunction name="hasDelimiter" output="false" access="public">
<cfreturn StructKeyExists(instance, "delimiter") AND Len(instance.delimiter) GT 0 />
</cffunction>
<cffunction name="getDelimiter" output="false" access="public">
<cfreturn instance.delimiter />
</cffunction>
<cffunction name="setDelimiter" output="false" access="public">
<cfargument name="delimiter" required="true" />
<cfset instance.delimiter = arguments.delimiter />
</cffunction>
<cffunction name="getStartNum" output="false" access="public">
<cfreturn instance.startNum />
</cffunction>
<cffunction name="setStartNum" output="false" access="public">
<cfargument name="startNum" required="true" />
<cfset instance.startNum = arguments.startNum />
</cffunction>
<cffunction name="setCountUp" output="false" access="public">
<cfset setDirection(this.COUNTUP) />
</cffunction>
<cffunction name="setCountDown" output="false" access="public">
<cfset setDirection(this.COUNTDOWN) />
</cffunction>
</cfcomponent>