<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>wheels/model/onmissingmethod.cfm</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -72,7 +72,9 @@
 		var key = &quot;&quot;;
 		variables.wheels.class.associations[arguments.name] = {};
 		for (key in arguments)
+		{
 			if (key != &quot;name&quot;)
 				variables.wheels.class.associations[arguments.name][key] = arguments[key];
+		}
 	&lt;/cfscript&gt;
 &lt;/cffunction&gt;
\ No newline at end of file</diff>
      <filename>wheels/model/associations.cfm</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,6 @@
 &lt;!--- PUBLIC MODEL CLASS METHODS ---&gt;
 
-&lt;cffunction name=&quot;average&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Calculates the average value for a given property. Uses the SQL function `AVG`.&quot;
+&lt;cffunction name=&quot;average&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Calculates the average value for a given property. Uses the SQL function `AVG`.&quot;
 	examples=
 	'
 		&lt;!--- Get the average salary for all employees ---&gt;
@@ -18,8 +17,7 @@
 	&lt;cfreturn $calculate(argumentCollection=arguments)&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;count&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Returns the number of rows that match the arguments (or all rows if no arguments are passed in). Uses the SQL function `COUNT`.&quot;
+&lt;cffunction name=&quot;count&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Returns the number of rows that match the arguments (or all rows if no arguments are passed in). Uses the SQL function `COUNT`.&quot;
 	examples=
 	'
 		&lt;!--- Count how many authors there are in the table ---&gt;
@@ -32,7 +30,7 @@
 		&lt;cfset authorWithBooksOnACount = model(&quot;author&quot;).count(include=&quot;books&quot;, where=&quot;title LIKE ''A%''&quot;)&gt;
 
 		&lt;!--- Count the number of comments on a specific post (a `hasMany` association from `post` to `comment` is required) ---&gt;
-		&lt;!--- The `commentCount` method below will call `model(&quot;comment&quot;).count(where=&quot;postId=##post.id##&quot;)` internally ---&gt;
+		&lt;!--- The `commentCount` method will call `model(&quot;comment&quot;).count(where=&quot;postId=##post.id##&quot;)` internally ---&gt;
 		&lt;cfset aPost = model(&quot;post&quot;).findByKey(params.postId)&gt;
 		&lt;cfset amount = aPost.commentCount()&gt;
 	'
@@ -55,8 +53,7 @@
 	&lt;cfreturn $calculate(argumentCollection=arguments)&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;maximum&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Calculates the maximum value for a given property. Uses the SQL function `MAX`.&quot;
+&lt;cffunction name=&quot;maximum&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Calculates the maximum value for a given property. Uses the SQL function `MAX`.&quot;
 	examples=
 	'
 		&lt;!--- Get the amount of the highest salary for all employees ---&gt;
@@ -72,8 +69,7 @@
 	&lt;cfreturn $calculate(argumentCollection=arguments)&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;minimum&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Calculates the minimum value for a given property. Uses the SQL function `MIN`.&quot;
+&lt;cffunction name=&quot;minimum&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Calculates the minimum value for a given property. Uses the SQL function `MIN`.&quot;
 	examples=
 	'
 		&lt;!--- Get the amount of the lowest salary for all employees ---&gt;
@@ -89,8 +85,7 @@
 	&lt;cfreturn $calculate(argumentCollection=arguments)&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;sum&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Calculates the sum of values for a given property. Uses the SQL function `SUM`.&quot;
+&lt;cffunction name=&quot;sum&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Calculates the sum of values for a given property. Uses the SQL function `SUM`.&quot;
 	examples=
 	'
 		&lt;!--- Get the sum of all salaries ---&gt;</diff>
      <filename>wheels/model/calculations.cfm</filename>
    </modified>
    <modified>
      <diff>@@ -1,28 +1,39 @@
 &lt;!--- PUBLIC MODEL INITIALIZATION METHODS ---&gt;
 
-&lt;cffunction name=&quot;afterNew&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Register method(s) that should be called after a new object has been initialized (usually done with the @new method).&quot;
+&lt;cffunction name=&quot;afterNew&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Registers method(s) that should be called after a new object has been initialized (usually done with the @new method).&quot;
 	examples=
 	'
 		&lt;!--- Instruct Wheels to call the `fixObj` method ---&gt;
 		&lt;cfset afterNew(&quot;fixObj&quot;)&gt;
 	'
 	categories=&quot;model-initialization,callbacks&quot; chapters=&quot;object-callbacks&quot; functions=&quot;afterCreate,afterDelete,afterFind,afterInitialization,afterSave,afterUpdate,afterValidation,afterValidationOnCreate,afterValidationOnUpdate,beforeCreate,beforeDelete,beforeSave,beforeUpdate,beforeValidation,beforeValidationOnCreate,beforeValidationOnUpdate&quot;&gt;
-	&lt;cfargument name=&quot;methods&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;Method name or list of method names (can also be called with the `method` argument).&quot;&gt;
+	&lt;cfargument name=&quot;methods&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;Method name or list of method names that should be called when this callback event occurs in an object's life cycle (can also be called with the `method` argument).&quot;&gt;
 	&lt;cfset $registerCallback(type=&quot;afterNew&quot;, argumentCollection=arguments)&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;afterFind&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Register method(s) that should be called after an existing object has been initialized (usually done with the findByKey or findOne method).&quot;
+&lt;cffunction name=&quot;afterFind&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Registers method(s) that should be called after an existing object has been initialized (usually done with the @findByKey or @findOne method).&quot;
 	examples=
 	'
-		&lt;!--- Instruct Wheels to call the `fixObj` method ---&gt;
-		&lt;cfset afterFind(&quot;fixObj&quot;)&gt;
+		&lt;!--- Instruct Wheels to call the `setTime` method after getting objects or records with one of the finder methods ---&gt;
+		&lt;cffunction name=&quot;init&quot;&gt;
+			&lt;cfset afterFind(&quot;setTime&quot;)&gt;
+		&lt;/cffunction&gt;
+
+		&lt;cffunction name=&quot;setTime&quot;&gt;
+			&lt;cfif StructIsEmpty(arguments)&gt;
+				&lt;cfset this.fetchedAt = Now()&gt;
+			&lt;cfelse&gt;
+				&lt;cfset arguments.fetchedAt = Now()&gt;
+				&lt;cfreturn arguments&gt;
+			&lt;/cfif&gt;
+		&lt;/cffunction&gt;
 	'
 	categories=&quot;model-initialization,callbacks&quot; chapters=&quot;object-callbacks&quot; functions=&quot;afterCreate,afterDelete,afterInitialization,afterNew,afterSave,afterUpdate,afterValidation,afterValidationOnCreate,afterValidationOnUpdate,beforeCreate,beforeDelete,beforeSave,beforeUpdate,beforeValidation,beforeValidationOnCreate,beforeValidationOnUpdate&quot;&gt;
 	&lt;cfargument name=&quot;methods&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;See documentation for @afterNew.&quot;&gt;
 	&lt;cfset $registerCallback(type=&quot;afterFind&quot;, argumentCollection=arguments)&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;afterInitialization&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Register method(s) that should be called after an object has been initialized.&quot;
+&lt;cffunction name=&quot;afterInitialization&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Registers method(s) that should be called after an object has been initialized.&quot;
 	examples=
 	'
 		&lt;!--- Instruct Wheels to call the `fixObj` method ---&gt;
@@ -33,7 +44,7 @@
 	&lt;cfset $registerCallback(type=&quot;afterInitialization&quot;, argumentCollection=arguments)&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;beforeValidation&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Register method(s) that should be called before an object is validated.&quot;
+&lt;cffunction name=&quot;beforeValidation&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Registers method(s) that should be called before an object is validated.&quot;
 	examples=
 	'
 		&lt;!--- Instruct Wheels to call the `fixObj` method ---&gt;</diff>
      <filename>wheels/model/callbacks.cfm</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,12 @@
-&lt;cffunction name=&quot;addError&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Adds an error on a specific property.&quot;
+&lt;!--- PUBLIC MODEL OBJECT METHODS ---&gt;
+
+&lt;cffunction name=&quot;addError&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Adds an error on a specific property.&quot;
 	examples=
 	'
 		&lt;!--- Add an error to the `email` property ---&gt;
 		&lt;cfset addError(property=&quot;email&quot;, message=&quot;Sorry, you are not allowed to use that email, try again please.&quot;)&gt;
 	'
-	categories=&quot;model-object&quot; chapters=&quot;object-validation&quot; functions=&quot;addErrorToBase,allErrors,clearErrors,errorCount,errorsOn,errorsOnBase,hasErrors&quot;&gt;
+	categories=&quot;model-object,errors&quot; chapters=&quot;object-validation&quot; functions=&quot;addErrorToBase,allErrors,clearErrors,errorCount,errorsOn,errorsOnBase,hasErrors&quot;&gt;
 	&lt;cfargument name=&quot;property&quot; type=&quot;string&quot; required=&quot;true&quot; hint=&quot;The name of the property you want to add an error for.&quot;&gt;
 	&lt;cfargument name=&quot;message&quot; type=&quot;string&quot; required=&quot;true&quot; hint=&quot;The error message (such as &quot;&quot;Please enter a correct name in the form field&quot;&quot; for example).&quot;&gt;
 	&lt;cfargument name=&quot;name&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;A name to identify the error by (useful when you need to distinguish one error from another one set on the same object and you don't want to use the error message itself for that).&quot;&gt;
@@ -14,14 +15,13 @@
 	&lt;/cfscript&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;addErrorToBase&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Adds an error on the object as a whole (not related to any specific property).&quot;
+&lt;cffunction name=&quot;addErrorToBase&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Adds an error on the object as a whole (not related to any specific property).&quot;
 	examples=
 	'
 		&lt;!--- Add an error on the object ---&gt;
 		&lt;cfset addError(message=&quot;Your email address has to be the same as your domain name.&quot;)&gt;
 	'
-	categories=&quot;model-object&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,allErrors,clearErrors,errorCount,errorsOn,errorsOnBase,hasErrors&quot;&gt;
+	categories=&quot;model-object,errors&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,allErrors,clearErrors,errorCount,errorsOn,errorsOnBase,hasErrors&quot;&gt;
 	&lt;cfargument name=&quot;message&quot; type=&quot;string&quot; required=&quot;true&quot; hint=&quot;See documentation for @addError.&quot;&gt;
 	&lt;cfargument name=&quot;name&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;See documentation for @addError.&quot;&gt;
 	&lt;cfscript&gt;
@@ -30,35 +30,31 @@
 	&lt;/cfscript&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;allErrors&quot; returntype=&quot;array&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Returns an array of all the errors on the object.&quot;
+&lt;cffunction name=&quot;allErrors&quot; returntype=&quot;array&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Returns an array of all the errors on the object.&quot;
 	examples=
 	'
 		&lt;!--- Get all the errors for the `user` object ---&gt;
 		&lt;cfset errorInfo = user.allErrors()&gt;
 	'
-	categories=&quot;model-object&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,clearErrors,errorCount,errorsOn,errorsOnBase,hasErrors&quot;&gt;
-	&lt;cfscript&gt;
-		var loc = {};
-		loc.returnValue = variables.wheels.errors;
-	&lt;/cfscript&gt;
-	&lt;cfreturn loc.returnValue&gt;
+	categories=&quot;model-object,errors&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,clearErrors,errorCount,errorsOn,errorsOnBase,hasErrors&quot;&gt;
+	&lt;cfreturn variables.wheels.errors&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;clearErrors&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Clears out all errors set on the object or only the ones set for a specific property or name.&quot;
+&lt;cffunction name=&quot;clearErrors&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Clears out all errors set on the object or only the ones set for a specific property or name.&quot;
 	examples=
 	'
 		&lt;!--- Clear all errors on `firstName` ---&gt;
 		&lt;cfset clearErrors(&quot;firstName&quot;)&gt;
 	'
-	categories=&quot;model-object&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,errorCount,errorsOn,errorsOnBase,hasErrors&quot;&gt;
+	categories=&quot;model-object,errors&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,errorCount,errorsOn,errorsOnBase,hasErrors&quot;&gt;
 	&lt;cfargument name=&quot;property&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;Specify a property name here if you want to clear all errors set on that property.&quot;&gt;
 	&lt;cfargument name=&quot;name&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;Specify an error name here if you want to clear all errors set with that error name.&quot;&gt;
 	&lt;cfscript&gt;
 		var loc = {};
 		if (!Len(arguments.property) &amp;&amp; !Len(arguments.name))
+		{
 			ArrayClear(variables.wheels.errors);
+		}
 		else
 		{
 			loc.iEnd = ArrayLen(variables.wheels.errors);
@@ -69,8 +65,7 @@
 	&lt;/cfscript&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;errorCount&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Returns the number of errors this object has associated with it. Specify `property` or `name` if you wish to count only specific errors.&quot;
+&lt;cffunction name=&quot;errorCount&quot; returntype=&quot;numeric&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Returns the number of errors this object has associated with it. Specify `property` or `name` if you wish to count only specific errors.&quot;
 	examples=
 	'
 		&lt;!--- Check how many errors are set on the object ---&gt;
@@ -78,27 +73,26 @@
 			&lt;!--- Do something to deal with this very erroneous author here... ---&gt;
 		&lt;/cfif&gt;
 	'
-	categories=&quot;model-object&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,clearErrors,errorsOn,errorsOnBase,hasErrors&quot;&gt;
+	categories=&quot;model-object,errors&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,clearErrors,errorsOn,errorsOnBase,hasErrors&quot;&gt;
 	&lt;cfargument name=&quot;property&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;Specify a property name here if you want to count only errors set on a specific property.&quot;&gt;
 	&lt;cfargument name=&quot;name&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;Specify an error name here if you want to count only errors set with a specific error name.&quot;&gt;
 	&lt;cfscript&gt;
-		var loc = {};
-		if(!len(arguments.property) &amp;&amp; !len(arguments.name))
-			loc.returnValue = ArrayLen(variables.wheels.errors);
+		var returnValue = &quot;&quot;;
+		if (!Len(arguments.property) &amp;&amp; !Len(arguments.name))
+			returnValue = ArrayLen(variables.wheels.errors);
 		else
-			loc.returnValue = ArrayLen(errorsOn(argumentCollection=arguments));
+			returnValue = ArrayLen(errorsOn(argumentCollection=arguments));
 	&lt;/cfscript&gt;
-	&lt;cfreturn loc.returnValue&gt;
+	&lt;cfreturn returnValue&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;errorsOn&quot; returntype=&quot;array&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Returns an array of all errors associated with the supplied property (and error name when passed in).&quot;
+&lt;cffunction name=&quot;errorsOn&quot; returntype=&quot;array&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Returns an array of all errors associated with the supplied property (and error name when passed in).&quot;
 	examples=
 	'
 		&lt;!--- Get all errors related to the email address of the user object ---&gt;
 		&lt;cfset errors = user.errorsOn(&quot;emailAddress&quot;)&gt;
 	'
-	categories=&quot;model-object&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,clearErrors,errorCount,errorsOnBase,hasErrors&quot;&gt;
+	categories=&quot;model-object,errors&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,clearErrors,errorCount,errorsOnBase,hasErrors&quot;&gt;
 	&lt;cfargument name=&quot;property&quot; type=&quot;string&quot; required=&quot;true&quot; hint=&quot;Specify the property name to return errors for here.&quot;&gt;
 	&lt;cfargument name=&quot;name&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;If you want to return only errors on the above property set with a specific error name you can specify it here.&quot;&gt;
 	&lt;cfscript&gt;
@@ -112,25 +106,21 @@
 	&lt;cfreturn loc.returnValue&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;errorsOnBase&quot; returntype=&quot;array&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Returns an array of all errors associated with the object as a whole (not related to any specific property).&quot;
+&lt;cffunction name=&quot;errorsOnBase&quot; returntype=&quot;array&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Returns an array of all errors associated with the object as a whole (not related to any specific property).&quot;
 	examples=
 	'
 		&lt;!--- Get all general type errors for the user object ---&gt;
 		&lt;cfset errors = user.errorsOnBase()&gt;
 	'
-	categories=&quot;model-object&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,clearErrors,errorCount,errorsOn,hasErrors&quot;&gt;
+	categories=&quot;model-object,errors&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,clearErrors,errorCount,errorsOn,hasErrors&quot;&gt;
 	&lt;cfargument name=&quot;name&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;Specify an error name here to only return errors for that error name.&quot;&gt;
 	&lt;cfscript&gt;
-		var loc = {};
 		arguments.property = &quot;&quot;;
-		loc.returnValue = errorsOn(argumentCollection=arguments);
 	&lt;/cfscript&gt;
-	&lt;cfreturn loc.returnValue&gt;
+	&lt;cfreturn errorsOn(argumentCollection=arguments)&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;hasErrors&quot; returntype=&quot;boolean&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Returns `true` if the object has any errors. You can also limit to only check a specific property and name for errors.&quot;
+&lt;cffunction name=&quot;hasErrors&quot; returntype=&quot;boolean&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Returns `true` if the object has any errors. You can also limit to only check a specific property and name for errors.&quot;
 	examples=
 	'
 		&lt;!--- Check if the post object has any errors set on it ---&gt;
@@ -138,15 +128,13 @@
 			&lt;!--- Send user to a form to correct the errors... ---&gt;
 		&lt;/cfif&gt;
 	'
-	categories=&quot;model-object&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,clearErrors,errorCount,errorsOn,errorsOnBase&quot;&gt;
+	categories=&quot;model-object,errors&quot; chapters=&quot;object-validation&quot; functions=&quot;addError,addErrorToBase,allErrors,clearErrors,errorCount,errorsOn,errorsOnBase&quot;&gt;
 	&lt;cfargument name=&quot;property&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;Name of the property to check if there are any errors set on.&quot;&gt;
 	&lt;cfargument name=&quot;name&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;Error name to check if there are any errors set with.&quot;&gt;
 	&lt;cfscript&gt;
-		var loc = {};
+		var returnValue = false;
 		if (errorCount(argumentCollection=arguments) &gt; 0)
-			loc.returnValue = true;
-		else
-			loc.returnValue = false;
+			returnValue = true;
 	&lt;/cfscript&gt;
-	&lt;cfreturn loc.returnValue&gt;
+	&lt;cfreturn returnValue&gt;
 &lt;/cffunction&gt;
\ No newline at end of file</diff>
      <filename>wheels/model/errors.cfm</filename>
    </modified>
    <modified>
      <diff>@@ -5,5 +5,6 @@
 &lt;cfinclude template=&quot;errors.cfm&quot;&gt;
 &lt;cfinclude template=&quot;initialization.cfm&quot;&gt;
 &lt;cfinclude template=&quot;miscellaneous.cfm&quot;&gt;
+&lt;cfinclude template=&quot;onmissingmethod.cfm&quot;&gt;
 &lt;cfinclude template=&quot;properties.cfm&quot;&gt;
 &lt;cfinclude template=&quot;validations.cfm&quot;&gt;
\ No newline at end of file</diff>
      <filename>wheels/model/functions.cfm</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,6 @@
-&lt;cffunction name=&quot;columnNames&quot; returntype=&quot;string&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Returns a list of column names in the table mapped to this model. The list is ordered according to the columns ordinal position in the database table.&quot;
-	examples=
-	'
-		&lt;!--- Get a list of all the column names in the table mapped to the author model ---&gt;
-		&lt;cfset columns = model(&quot;author&quot;).columnNames()&gt;
-	'
-	categories=&quot;model-class&quot; chapters=&quot;object-relational-mapping&quot; functions=&quot;dataSource,property,propertyNames,table,tableName&quot;&gt;
-	&lt;cfreturn variables.wheels.class.columnList&gt;
-&lt;/cffunction&gt;
+&lt;!--- PUBLIC MODEL INITIALIZATION METHODS ---&gt;
 
-&lt;cffunction name=&quot;dataSource&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Use this method to override the data source connection information for this model.&quot;
+&lt;cffunction name=&quot;dataSource&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Use this method to override the data source connection information for this model.&quot;
 	examples=
 	'
 		&lt;!--- In models/User.cfc ---&gt;
@@ -19,7 +9,7 @@
   			&lt;cfset dataSource(&quot;users_source&quot;)&gt;
 		&lt;/cffunction&gt;
 	'
-	categories=&quot;model-initialization&quot; chapters=&quot;object-relational-mapping&quot; functions=&quot;columnNames,property,propertyNames,table,tableName&quot;&gt;
+	categories=&quot;model-initialization,general&quot; chapters=&quot;object-relational-mapping&quot; functions=&quot;columnNames,property,propertyNames,table,tableName&quot;&gt;
 	&lt;cfargument name=&quot;datasource&quot; type=&quot;string&quot; required=&quot;true&quot; hint=&quot;The data source name to connect to.&quot;&gt;
 	&lt;cfargument name=&quot;username&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;The username for the data source.&quot;&gt;
 	&lt;cfargument name=&quot;password&quot; type=&quot;string&quot; required=&quot;false&quot; default=&quot;&quot; hint=&quot;The password for the data source.&quot;&gt;
@@ -28,8 +18,7 @@
 	&lt;/cfscript&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;table&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Use this method to tell Wheels what database table to connect to for this model. You only need to use this method when your table naming does not follow the standard Wheels convention of a singular object name mapping to a plural table name.&quot;
+&lt;cffunction name=&quot;table&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Use this method to tell Wheels what database table to connect to for this model. You only need to use this method when your table naming does not follow the standard Wheels convention of a singular object name mapping to a plural table name.&quot;
 	examples=
 	'
 		&lt;!--- In models/User.cfc ---&gt;
@@ -38,267 +27,41 @@
 			&lt;cfset table(&quot;tbl_USERS&quot;)&gt;
 		&lt;/cffunction&gt;
 	'
-	categories=&quot;model-initialization&quot; chapters=&quot;object-relational-mapping&quot; functions=&quot;columnNames,dataSource,property,propertyNames,tableName&quot;&gt;
+	categories=&quot;model-initialization,general&quot; chapters=&quot;object-relational-mapping&quot; functions=&quot;columnNames,dataSource,property,propertyNames,tableName&quot;&gt;
 	&lt;cfargument name=&quot;name&quot; type=&quot;string&quot; required=&quot;true&quot; hint=&quot;Name of the table to map this model to.&quot;&gt;
 	&lt;cfscript&gt;
 		variables.wheels.class.tableName = arguments.name;
 	&lt;/cfscript&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;tableName&quot; returntype=&quot;string&quot; access=&quot;public&quot; output=&quot;false&quot;
-	hint=&quot;Returns the name of the database table that this model is mapped to.&quot;
+&lt;!--- PUBLIC MODEL CLASS METHODS ---&gt;
+
+&lt;cffunction name=&quot;columnNames&quot; returntype=&quot;string&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Returns a list of column names in the table mapped to this model. The list is ordered according to the columns ordinal position in the database table.&quot;
 	examples=
 	'
-		&lt;!--- Check what table the user model uses ---&gt;
-		&lt;cfset whatAmIMappedTo = model(&quot;user&quot;).tableName()&gt;
+		&lt;!--- Get a list of all the column names in the table mapped to the author model ---&gt;
+		&lt;cfset columns = model(&quot;author&quot;).columnNames()&gt;
 	'
-	categories=&quot;model-class&quot; chapters=&quot;object-relational-mapping&quot; functions=&quot;columnNames,dataSource,property,propertyNames,table&quot;&gt;
-	&lt;cfreturn variables.wheels.class.tableName&gt;
-&lt;/cffunction&gt;
-
-&lt;cffunction name=&quot;onMissingMethod&quot; returntype=&quot;any&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;This method handles dynamic finders, property and association methods. It is not part of the public API.&quot;&gt;
-	&lt;cfargument name=&quot;missingMethodName&quot; type=&quot;string&quot; required=&quot;true&quot;&gt;
-	&lt;cfargument name=&quot;missingMethodArguments&quot; type=&quot;struct&quot; required=&quot;true&quot;&gt;
-	&lt;cfscript&gt;
-		var loc = {};
-		if (Right(arguments.missingMethodName, 10) == &quot;hasChanged&quot;)
-			loc.returnValue = hasChanged(property=ReplaceNoCase(arguments.missingMethodName, &quot;hasChanged&quot;, &quot;&quot;));
-		else if (Right(arguments.missingMethodName, 11) == &quot;changedFrom&quot;)
-			loc.returnValue = changedFrom(property=ReplaceNoCase(arguments.missingMethodName, &quot;changedFrom&quot;, &quot;&quot;));
-		else if (Left(arguments.missingMethodName, 9) == &quot;findOneBy&quot; || Left(arguments.missingMethodName, 9) == &quot;findAllBy&quot;)
-		{
-			if (StructKeyExists(server, &quot;railo&quot;))
-				loc.finderProperties = ListToArray(LCase(ReplaceNoCase(ReplaceNoCase(ReplaceNoCase(arguments.missingMethodName, &quot;And&quot;, &quot;|&quot;), &quot;findAllBy&quot;, &quot;&quot;), &quot;findOneBy&quot;, &quot;&quot;)), &quot;|&quot;); // since Railo passes in the method name in all upper case we have to do this here
-			else
-				loc.finderProperties = ListToArray(ReplaceNoCase(ReplaceNoCase(Replace(arguments.missingMethodName, &quot;And&quot;, &quot;|&quot;), &quot;findAllBy&quot;, &quot;&quot;), &quot;findOneBy&quot;, &quot;&quot;), &quot;|&quot;);
-			loc.firstProperty = loc.finderProperties[1];
-			loc.secondProperty = IIf(ArrayLen(loc.finderProperties) == 2, &quot;loc.finderProperties[2]&quot;, &quot;&quot;);
-
-			// throw an error when more than one argument is passed in but not `value` (for single property) or `values` (for multiple properties)
-			// this means that model(&quot;artist&quot;).findOneByName(&quot;U2&quot;) will still work but not model(&quot;artist&quot;).findOneByName(values=&quot;U2&quot;, returnAs=&quot;query&quot;), need to pass in just `value` there instead.
-			if (application.wheels.showDebugInformation)
-			{
-				if (StructCount(arguments.missingMethodArguments) &gt; 1)
-				{
-					if (Len(loc.secondProperty))
-					{
-						if (!StructKeyExists(arguments.missingMethodArguments, &quot;values&quot;))
-							$throw(type=&quot;Wheels.IncorrectArguments&quot;, message=&quot;The `values` argument is required but was not passed in.&quot;, extendedInfo=&quot;Pass in a list of values to the dynamic finder in the `values` argument.&quot;);
-					}
-					else
-					{
-						if (!StructKeyExists(arguments.missingMethodArguments, &quot;value&quot;))
-							$throw(type=&quot;Wheels.IncorrectArguments&quot;, message=&quot;The `value` argument is required but was not passed in.&quot;, extendedInfo=&quot;Pass in a value to the dynamic finder in the `value` argument.&quot;);
-					}
-				}
-			}
-
-			if (StructCount(arguments.missingMethodArguments) == 1)
-				loc.firstValue = Trim(ListFirst(arguments.missingMethodArguments[1]));
-			else if (StructKeyExists(arguments.missingMethodArguments, &quot;value&quot;))
-				loc.firstValue = arguments.missingMethodArguments.value;
-			else if (StructKeyExists(arguments.missingMethodArguments, &quot;values&quot;))
-				loc.firstValue = Trim(ListFirst(arguments.missingMethodArguments.values));
-			loc.addToWhere = &quot;#loc.firstProperty# = '#loc.firstValue#'&quot;;
-			if (Len(loc.secondProperty))
-			{
-				if (StructCount(arguments.missingMethodArguments) == 1)
-					loc.secondValue = Trim(ListLast(arguments.missingMethodArguments[1]));
-				else if (StructKeyExists(arguments.missingMethodArguments, &quot;values&quot;))
-					loc.secondValue = Trim(ListLast(arguments.missingMethodArguments.values));
-				loc.addToWhere = loc.addToWhere &amp; &quot; AND #loc.secondProperty# = '#loc.secondValue#'&quot;;
-			}
-			arguments.missingMethodArguments.where = IIf(StructKeyExists(arguments.missingMethodArguments, &quot;where&quot;), &quot;'(' &amp; arguments.missingMethodArguments.where &amp; ') AND (' &amp; loc.addToWhere &amp; ')'&quot;, &quot;loc.addToWhere&quot;);
-			StructDelete(arguments.missingMethodArguments, &quot;1&quot;);
-			StructDelete(arguments.missingMethodArguments, &quot;value&quot;);
-			StructDelete(arguments.missingMethodArguments, &quot;values&quot;);
-			loc.returnValue = IIf(Left(arguments.missingMethodName, 9) == &quot;findOneBy&quot;, &quot;findOne(argumentCollection=arguments.missingMethodArguments)&quot;, &quot;findAll(argumentCollection=arguments.missingMethodArguments)&quot;);
-		}
-		else
-		{
-			for (loc.key in variables.wheels.class.associations)
-			{
-				loc.method = &quot;&quot;;
-				if (StructKeyExists(variables.wheels.class.associations[loc.key], &quot;shortcut&quot;) &amp;&amp; arguments.missingMethodName == variables.wheels.class.associations[loc.key].shortcut)
-				{
-					loc.method = &quot;findAll&quot;;
-					loc.joinAssociation = $expandedAssociations(include=loc.key);
-					loc.joinAssociation = loc.joinAssociation[1];
-					loc.joinClass = loc.joinAssociation.class;
-					loc.info = model(loc.joinClass).$expandedAssociations(include=ListFirst(variables.wheels.class.associations[loc.key].through));
-					loc.info = loc.info[1];
-					loc.include = ListLast(variables.wheels.class.associations[loc.key].through);
-					if (StructKeyExists(arguments.missingMethodArguments, &quot;include&quot;))
-						loc.include = &quot;#loc.include#(#arguments.missingMethodArguments.include#)&quot;;
-					arguments.missingMethodArguments.include = loc.include;
-					loc.where = $keyWhereString(properties=loc.joinAssociation.foreignKey, keys=variables.wheels.class.keys);
-					if (StructKeyExists(arguments.missingMethodArguments, &quot;where&quot;))
-						loc.where = &quot;(#loc.where#) AND (#arguments.missingMethodArguments.where#)&quot;;
-					arguments.missingMethodArguments.where = loc.where;
-					if (!StructKeyExists(arguments.missingMethodArguments, &quot;returnIncluded&quot;))
-						arguments.missingMethodArguments.returnIncluded = false;
-				}
-				else if (ListFindNoCase(variables.wheels.class.associations[loc.key].methods, arguments.missingMethodName))
-				{
-					loc.info = $expandedAssociations(include=loc.key);
-					loc.info = loc.info[1];
-					loc.where = $keyWhereString(properties=loc.info.foreignKey, keys=variables.wheels.class.keys);
-					if (StructKeyExists(arguments.missingMethodArguments, &quot;where&quot;))
-						loc.where = &quot;(#loc.where#) AND (#arguments.missingMethodArguments.where#)&quot;;
-					if (loc.info.type == &quot;hasOne&quot;)
-					{
-						loc.name = ReplaceNoCase(arguments.missingMethodName, loc.key, &quot;object&quot;); // create a generic method name (example: &quot;hasProfile&quot; becomes &quot;hasObject&quot;)
-						if (loc.name == &quot;object&quot;)
-						{
-							loc.method = &quot;findOne&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-						}
-						else if (loc.name == &quot;hasObject&quot;)
-						{
-							loc.method = &quot;exists&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-						}
-						else if (loc.name == &quot;newObject&quot;)
-						{
-							loc.method = &quot;new&quot;;
-							$setForeignKeyValues(missingMethodArguments=arguments.missingMethodArguments, keys=loc.info.foreignKey);
-						}
-						else if (loc.name == &quot;createObject&quot;)
-						{
-							loc.method = &quot;create&quot;;
-							$setForeignKeyValues(missingMethodArguments=arguments.missingMethodArguments, keys=loc.info.foreignKey);
-						}
-						else if (loc.name == &quot;removeObject&quot;)
-						{
-							loc.method = &quot;updateOne&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-							$setForeignKeyValues(missingMethodArguments=arguments.missingMethodArguments, keys=loc.info.foreignKey, setToNull=true);
-						}
-						else if (loc.name == &quot;deleteObject&quot;)
-						{
-							loc.method = &quot;deleteOne&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-						}
-						else if (loc.name == &quot;setObject&quot;)
-						{
-							loc.method = &quot;updateByKey&quot;;
-							$setForeignKeyValues(missingMethodArguments=arguments.missingMethodArguments, keys=loc.info.foreignKey);
-							$setObjectOrNumberToKey(arguments.missingMethodArguments);
-						}
-					}
-					else if (loc.info.type == &quot;hasMany&quot;)
-					{
-						loc.name = ReplaceNoCase(ReplaceNoCase(arguments.missingMethodName, loc.key, &quot;objects&quot;), singularize(loc.key), &quot;object&quot;); // create a generic method name (example: &quot;hasComments&quot; becomes &quot;hasObjects&quot;)
-						if (loc.name == &quot;objects&quot;)
-						{
-							loc.method = &quot;findAll&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-						}
-						else if (loc.name == &quot;addObject&quot;)
-						{
-							loc.method = &quot;updateByKey&quot;;
-							$setForeignKeyValues(missingMethodArguments=arguments.missingMethodArguments, keys=loc.info.foreignKey);
-							$setObjectOrNumberToKey(arguments.missingMethodArguments);
-						}
-						else if (loc.name == &quot;removeObject&quot;)
-						{
-							loc.method = &quot;updateByKey&quot;;
-							$setForeignKeyValues(missingMethodArguments=arguments.missingMethodArguments, keys=loc.info.foreignKey, setToNull=true);
-							$setObjectOrNumberToKey(arguments.missingMethodArguments);
-						}
-						else if (loc.name == &quot;deleteObject&quot;)
-						{
-							loc.method = &quot;deleteByKey&quot;;
-							$setObjectOrNumberToKey(arguments.missingMethodArguments);
-						}
-						else if (loc.name == &quot;hasObjects&quot;)
-						{
-							loc.method = &quot;exists&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-						}
-						else if (loc.name == &quot;newObject&quot;)
-						{
-							loc.method = &quot;new&quot;;
-							$setForeignKeyValues(missingMethodArguments=arguments.missingMethodArguments, keys=loc.info.foreignKey);
-						}
-						else if (loc.name == &quot;createObject&quot;)
-						{
-							loc.method = &quot;create&quot;;
-							$setForeignKeyValues(missingMethodArguments=arguments.missingMethodArguments, keys=loc.info.foreignKey);
-						}
-						else if (loc.name == &quot;objectCount&quot;)
-						{
-							loc.method = &quot;count&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-						}
-						else if (loc.name == &quot;findOneObject&quot;)
-						{
-							loc.method = &quot;findOne&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-						}
-						else if (loc.name == &quot;removeAllObjects&quot;)
-						{
-							loc.method = &quot;updateAll&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-							$setForeignKeyValues(missingMethodArguments=arguments.missingMethodArguments, keys=loc.info.foreignKey, setToNull=true);
-						}
-						else if (loc.name == &quot;deleteAllObjects&quot;)
-						{
-							loc.method = &quot;deleteAll&quot;;
-							arguments.missingMethodArguments.where = loc.where;
-						}
-					}
-					else if (loc.info.type == &quot;belongsTo&quot;)
-					{
-						loc.name = ReplaceNoCase(arguments.missingMethodName, loc.key, &quot;object&quot;); // create a generic method name (example: &quot;hasAuthor&quot; becomes &quot;hasObject&quot;)
-						if (loc.name == &quot;object&quot;)
-						{
-							loc.method = &quot;findByKey&quot;;
-							arguments.missingMethodArguments.key = $propertyValue(name=loc.info.foreignKey);
-						}
-						else if (loc.name == &quot;hasObject&quot;)
-						{
-							loc.method = &quot;exists&quot;;
-							arguments.missingMethodArguments.key = $propertyValue(name=loc.info.foreignKey);
-						}
-					}
-				}
-				if (Len(loc.method))
-					loc.returnValue = $invoke(componentReference=model(loc.info.class), method=loc.method, argumentCollection=arguments.missingMethodArguments);
-			}
-		}
-		if (!StructKeyExists(loc, &quot;returnValue&quot;))
-			$throw(type=&quot;Wheels.MethodNotFound&quot;, message=&quot;The method `#arguments.missingMethodName#` was not found in this model.&quot;, extendedInfo=&quot;Check your spelling or add the method to the model's CFC file.&quot;);
-	&lt;/cfscript&gt;
-	&lt;cfreturn loc.returnValue&gt;
+	categories=&quot;model-class,miscellaneous&quot; chapters=&quot;object-relational-mapping&quot; functions=&quot;dataSource,property,propertyNames,table,tableName&quot;&gt;
+	&lt;cfreturn variables.wheels.class.columnList&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;$setForeignKeyValues&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot;&gt;
-	&lt;cfargument name=&quot;missingMethodArguments&quot; type=&quot;struct&quot; required=&quot;true&quot;&gt;
-	&lt;cfargument name=&quot;keys&quot; type=&quot;string&quot; required=&quot;true&quot;&gt;
-	&lt;cfargument name=&quot;setToNull&quot; type=&quot;boolean&quot; required=&quot;false&quot; default=&quot;false&quot;&gt;
-	&lt;cfscript&gt;
-		var loc = {};
-		loc.iEnd = ListLen(arguments.keys);
-		for (loc.i=1; loc.i &lt;= loc.iEnd; loc.i++)
-		{
-			if (arguments.setToNull)
-				arguments.missingMethodArguments[ListGetAt(arguments.keys, loc.i)] = &quot;&quot;;
-			else
-				arguments.missingMethodArguments[ListGetAt(arguments.keys, loc.i)] = this[ListGetAt(variables.wheels.class.keys, loc.i)];
-		}
-	&lt;/cfscript&gt;
+&lt;cffunction name=&quot;primaryKey&quot; returntype=&quot;string&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Returns the name of the primary key for this model's table. This is determined through database introspection. If composite primary keys have been used they will both be returned in a list.&quot;
+	examples=
+	'
+		&lt;!--- Get the name of the primary key of the table mapped to the `employee` model (the `employees` table by default) ---&gt;
+		&lt;cfset theKeyName = model(&quot;employee&quot;).primaryKey()&gt;
+	'
+	categories=&quot;model-class,miscellaneous&quot; chapters=&quot;object-relational-mapping&quot; functions=&quot;&quot;&gt;
+	&lt;cfreturn variables.wheels.class.keys&gt;
 &lt;/cffunction&gt;
 
-&lt;cffunction name=&quot;$setObjectOrNumberToKey&quot; returntype=&quot;void&quot; access=&quot;public&quot; output=&quot;false&quot;&gt;
-	&lt;cfargument name=&quot;missingMethodArguments&quot; type=&quot;struct&quot; required=&quot;true&quot;&gt;
-	&lt;cfscript&gt;
-		var loc = {};
-		loc.keyOrObject = arguments.missingMethodArguments[ListFirst(StructKeyList(arguments.missingMethodArguments))];
-		StructDelete(arguments.missingMethodArguments, ListFirst(StructKeyList(arguments.missingMethodArguments)));
-		if (IsObject(loc.keyOrObject))
-			arguments.missingMethodArguments.key = loc.keyOrObject.key();
-		else
-			arguments.missingMethodArguments.key = loc.keyOrObject;
-	&lt;/cfscript&gt;
+&lt;cffunction name=&quot;tableName&quot; returntype=&quot;string&quot; access=&quot;public&quot; output=&quot;false&quot; hint=&quot;Returns the name of the database table that this model is mapped to.&quot;
+	examples=
+	'
+		&lt;!--- Check what table the user model uses ---&gt;
+		&lt;cfset whatAmIMappedTo = model(&quot;user&quot;).tableName()&gt;
+	'
+	categories=&quot;model-class,miscellaneous&quot; chapters=&quot;object-relational-mapping&quot; functions=&quot;columnNames,dataSource,property,propertyNames,table&quot;&gt;
+	&lt;cfreturn variables.wheels.class.tableName&gt;
 &lt;/cffunction&gt;
\ No newline at end of file</diff>
      <filename>wheels/model/miscellaneous.cfm</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>b4753516e8740e1db8d8f559619f65a7258d1bbd</id>
    </parent>
  </parents>
  <author>
    <name>per.djurner</name>
    <email>per.djurner@d8ff095c-9719-0410-9cd3-1dd5d13d90f5</email>
  </author>
  <url>http://github.com/rip747/cfwheels/commit/11fa7904a675c32fd099d7c0234f28b5e81d4559</url>
  <id>11fa7904a675c32fd099d7c0234f28b5e81d4559</id>
  <committed-date>2009-11-03T13:39:12-08:00</committed-date>
  <authored-date>2009-11-03T13:39:12-08:00</authored-date>
  <message>Docs, syntax, file moves.

git-svn-id: https://cfwheels.googlecode.com/svn/trunk@3645 d8ff095c-9719-0410-9cd3-1dd5d13d90f5</message>
  <tree>4afc1c5eeed41f8322361a9a4b4bbb9091882130</tree>
  <committer>
    <name>per.djurner</name>
    <email>per.djurner@d8ff095c-9719-0410-9cd3-1dd5d13d90f5</email>
  </committer>
</commit>
