-<!--- Class Methods --->
-
 <cffunction name="findByKey" returntype="any" access="public" output="false" hint="Fetches the requested record and returns it as an object. Throws an error if no record is found.">
 	<cfargument name="key" type="any" required="true" hint="Primary key value(s) of record to fetch. Separate with comma if passing in multiple primary key values.">
 	<cfargument name="select" type="string" required="false" default="" hint="See documentation for `findAll`">

	</cfscript>
</cffunction>

<cffunction name="changedProperties" returntype="string" access="public" output="false" hint="Object, returns a list of the object properties that have been changed but not yet saved to the database">
	<cfscript>
		var loc = {};
		loc.returnValue = "";
		for (loc.key in variables.wheels.class.properties)
			if (hasChanged(loc.key))
				loc.returnValue = ListAppend(loc.returnValue, loc.key);
	</cfscript>
	<cfreturn loc.returnValue>
</cffunction>

<cffunction name="allChanges" returntype="struct" access="public" output="false" hint="Object, returns a struct detailing all changes that have been made on the object but not yet saved to the database">
	<cfscript>
		var loc = {};
		loc.returnValue = {};
		if (hasChanged())
		{
			loc.changedProperties = changedProperties();
			for (loc.i=1; loc.i LTE ListLen(loc.changedProperties); loc.i=loc.i+1)
			{
				loc.item = ListGetAt(loc.changedProperties, loc.i);
				loc.returnValue[loc.item] = {};
				loc.returnValue[loc.item].changedFrom = $changedFrom(loc.item);
				loc.returnValue[loc.item].changedTo = this[loc.item];
			}
		}
	</cfscript>
	<cfreturn loc.returnValue>
</cffunction>

<cffunction name="hasChanged" returntype="boolean" access="public" output="false" hint="Object, returns 'true' if the specified object property (or any if none was passed in) have been changed but not yet saved to the database">
	<cfargument name="property" type="string" required="false" default="" hint="Name of property to check for change">
	<cfscript>
		var loc = {};
		loc.returnValue = false;
		for (loc.key in variables.wheels.class.properties)
			if (!StructKeyExists(this, loc.key) || !StructKeyExists(variables.$persistedProperties, loc.key) || this[loc.key] IS NOT variables.$persistedProperties[loc.key] && (Len(arguments.property) IS 0 || loc.key IS arguments.property))
				loc.returnValue = true;
	</cfscript>
	<cfreturn loc.returnValue>
</cffunction>

<cffunction name="$isNew" returntype="boolean" access="public" output="false">
	<cfscript>
		var loc = {};

		loc.returnValue = variables.$persistedProperties[arguments.property];
	</cfscript>
	<cfreturn loc.returnValue>
</cffunction>

<cffunction name="$addDeleteClause" returntype="array" access="public" output="false">
