It's been about a year in the making, and well over 1000 commits, but the beta for 2.0 has now arrived! We're still catching up on the main documentation as there's so much to cover in this release, so bear with us a bit! In the meantime, please do check it out:
<ul>
<li>Direct Download: <a href="https://github.com/cfwheels/cfwheels/releases/download/v2.0.0-beta.1/cfwheels-2.0.0-beta.1.zip">Download zip</a></li>
<li>Commandbox quick install : <code>install cfwheels@be</code> (Just downloads and unzips)</li>
<li>Commandbox install wizard via CFWheels CLI (with url rewriting included): <code>wheels new</code>
<em>(make sure your version of the CLI is up to date with <code>install cfwheels-cli</code>)</em></li>
</ul>
Make sure to check the "Breaking Changes" section below, and <a href="https://github.com/cfwheels/cfwheels/issues">please report any bugs</a>.
<hr />
<h4>Need a little help upgrading?</h4>
There will be some more posts coming up covering some of the big topics like routing & migrations, but in the meantime:
<ul>
<li>Check out Adam's <a href="https://github.com/chapmandu/UpgradeAdvisor">upgrade advisor plugin</a> (Commandbox: <code>install upgradeadvisor</code>)</li>
<li>Get in touch via the Mailing List, Slack channel etc.</li>
</ul>
<hr />
<h3>Changelog</h3>
<h3>Model Enhancements</h3>
<ul>
<li>Support for passing in <code>select=false</code> to <code>property()</code> to not include a calculated property by default in SELECT clauses - <a href="https://github.com/cfwheels/cfwheels/issues/122">#122</a> [Adam Chapman, Per Djurner]</li>
<li>Support for setting calculated properties to a specific data type - [Per Djurner]</li>
<li>Support for <code>returnIncludedAs</code> and <code>returnIncluded</code> arguments to <code>properties()</code> for returning nested properties - [Adam Chapman]</li>
<li>Support for calling <code>updateProperty()</code> with dynamic argument, e.g. <code>updateProperty(firstName="Per")</code> - [Per Djurner]</li>
<li>Support for using boolean transaction argument, e.g. <code>update(transaction=false)</code> - <a href="https://github.com/cfwheels/cfwheels/issues/654">#654</a> [Adam Chapman]</li>
<li>Support for MariaDB - <a href="https://github.com/cfwheels/cfwheels/issues/563">#563</a> [AlexeiCF, Adam Chapman]</li>
<li>Model instance <code>isPersisted()</code> and <code>propertyIsBlank()</code> methods - <a href="https://github.com/cfwheels/cfwheels/issues/559">#559</a> [Chris Peters]</li>
<li>Database Migrations (dbmigrate) now available in the core - <a href="https://github.com/cfwheels/cfwheels/issues/664">#664</a> [Adam Chapman, Tom King, Mike Grogan]</li>
<li>Databases can now be automatically migrated to the latest version on application start - <a href="https://github.com/cfwheels/cfwheels/issues/766">#766</a> [Tom King]</li>
<li>New <code>timeStampMode</code> setting (<code>"utc"</code>, <code>"local"</code> or <code>"epoch"</code>) for the <code>createdAt</code> and <code>updatedAt</code>columns - [Andy Bellenie]</li>
<li>Allow nested transactions - <a href="https://github.com/cfwheels/cfwheels/issues/732">#732</a> [Andy Bellenie]</li>
<li>The <code>handle</code> argument to finders now set the variable name for the query so it's easier to find in the debug output - [Per Djurner]</li>
<li>Support added for HAVING when using aggregate functions in the <code>where</code> argument - <a href="https://github.com/cfwheels/cfwheels/issues/483">#483</a> [Per Djurner]</li>
<li>Added support for the JSON data type in the MySQL adapter - <a href="https://github.com/cfwheels/cfwheels/issues/759">#759</a> [Joel Stobart]</li>
<li>Corrected mapping for text types in the MySQL adapter - <a href="https://github.com/cfwheels/cfwheels/issues/759">#759</a> [Joel Stobart]</li>
<li>Added global setting, <code>lowerCaseTableNames</code>, to always lower case table names in SQL statements - [Per Djurner]</li>
</ul>
<h3>View Enhancements</h3>
<ul>
<li><code>flashMessages()</code> are now in default layout.cfm - <a href="https://github.com/cfwheels/cfwheels/issues/650">#650</a> [Tom King]</li>
<li>Added ability to override value in <code>textField()</code>, <code>passwordField()</code> and <code>hiddenField()</code> - <a href="https://github.com/cfwheels/cfwheels/issues/633">#633</a> [Per Djurner, Chris Peters]</li>
<li>Support for the <code>method</code> argument in <code>buttonTo()</code> helper - <a href="https://github.com/cfwheels/cfwheels/issues/761">#761</a> [Adam Chapman]</li>
</ul>
<h3>Controller Enhancements</h3>
<ul>
<li>Support for HTTP verbs, scopes, namespaces, and resources in routes (ColdRoute) [Don Humphreys, James Gibson, Tom King]</li>
<li>Support for passing in <code>ram://</code> resources to <code>sendFile()</code> - <a href="https://github.com/cfwheels/cfwheels/issues/566">#566</a> [Tom King]</li>
<li>Extended <code>sendMail()</code> so that it can return the text and/or html content of the email - <a href="https://github.com/cfwheels/cfwheels/issues/122">#122</a> [Adam Chapman]</li>
<li><code>renderWith()</code> can now set http status codes in header with the <code>status</code> argument - <a href="https://github.com/cfwheels/cfwheels/issues/549">#549</a> [Tom King]</li>
<li>Cross-Site Request Forgery (CSRF) protection - <a href="https://github.com/cfwheels/cfwheels/issues/613">#613</a> [Chris Peters]</li>
<li>Parse JSON body and add to params struct - [Tom King, Per Djurner]</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fixes skipped model instantiation due to Linux file case sensitivity - <a href="https://github.com/cfwheels/cfwheels/issues/643">#643</a> [Adam Chapman, Tom King]</li>
<li>Added spatial datatypes for MySQL - <a href="https://github.com/cfwheels/cfwheels/issues/660">#660</a> [Normal Cesar]</li>
<li>Made <code>humanize()</code> keep spaces in input - <a href="https://github.com/cfwheels/cfwheels/issues/663">#663</a> [Per Djurner, Chris Peters]</li>
<li>Avoid double redirect error when doing delayed redirects from a verification handler function - [Per Djurner]</li>
<li>Fixes attempts to insert nulls for blank strings - <a href="https://github.com/cfwheels/cfwheels/issues/654">#654</a> [Andy Bellenie, Per Djurner]</li>
<li>Fix for using <code>validatePresenceOf()</code> with default on update - [Andy Bellenie]</li>
<li>Fixes so paginated finder calls with no records include column names - <a href="https://github.com/cfwheels/cfwheels/issues/722">#722</a> [Per Djurner]</li>
<li>Fixes "invalid data" error when using unsigned integers in MySQL - <a href="https://github.com/cfwheels/cfwheels/issues/768">#768</a> [Per Djurner]</li>
</ul>
<h3>Plugins</h3>
<ul>
<li>Plugins now distributed via forgebox.io [Tom King]</li>
<li>Update to the plugin system to allow overriding of the same framework method multiple times - <a href="https://github.com/cfwheels/cfwheels/issues/681">#681</a> [James Gibson, Tom King]</li>
<li>Added ability to turn off incompatible plugin warnings from showing - [Danny Beard]</li>
<li>Plugins now have any java lib/class files automatically mapped onApplicationStart <a href="https://github.com/cfwheels/cfwheels/issues/731">731</a> [Andy Bellenie, Tom King]</li>
<li>Plugins now read version number off their <code>box.json</code> files and are displayed in debug area <a href="https://github.com/cfwheels/cfwheels/issues/68">#68</a> [Tom King]</li>
<li>Plugin meta data as set in <code>box.json</code> now available in <code>application.wheels.pluginMeta</code> scope <a href="https://github.com/cfwheels/cfwheels/issues/68">#68</a> [Tom King]</li>
</ul>
<h3>Miscellaneous</h3>
<ul>
<li>Redirect away after a reload request - [Chris Peters]</li>
<li>Support checking IP in <code>http_x_forwarded_for</code> when doing maintenance mode exclusions - [Per Djurner]</li>
<li>Support checking user agent string when doing maintenance mode exclusions - [Per Djurner]</li>
<li>Added JUnit and JSON format test results - [Adam Chapman]</li>
<li>Added empty application test directories - [Chris Peters, Adam Chapman]</li>
<li>Added default <code>urlrewrite.xml</code> to support Tuckey URL rewriting with Commandbox <a class="issue-link js-issue-link" href="https://github.com/cfwheels/cfwheels/issues/649" data-url="https://github.com/cfwheels/cfwheels/issues/649" data-id="164882366" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#649</a> - [Tom King]</li>
<li>Added <code>beforeAll()</code>, <code>afterAll()</code>, <code>packageSetup()</code>, <code>packageTeardown()</code> methods to test framework <a class="issue-link js-issue-link" href="https://github.com/cfwheels/cfwheels/issues/651" data-url="https://github.com/cfwheels/cfwheels/issues/651" data-id="166957403" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#651</a> - [Adam Chapman]</li>
<li>Added <code>errorEmailFromAddress</code> and <code>errorEmailToAddress</code> config settings - <a href="https://github.com/cfwheels/cfwheels/issues/95">#95</a> [Andy Bellenie, Tony Petruzzi, Per Djurner]</li>
<li>Support for passing in any "truthy" value to <code>assert()</code> in tests - [Per Djurner]</li>
<li>Added <code>/app/</code> mapping pointing to the root of the application - [Per Djurner]</li>
<li>Added a <code>processRequest()</code> function that simplifies testing controllers - [Per Djurner]</li>
<li>Added new embedded documentation viewer/generator for JavaDoc - <a href="https://github.com/cfwheels/cfwheels/issues/734">#734</a> [Tom King]</li>
<li>Removes all references to Railo - <a href="https://github.com/cfwheels/cfwheels/issues/656">#656</a> (Adam Chapman)</li>
<li>Made uncountable and irregular words configurable - <a href="https://github.com/cfwheels/cfwheels/issues/739">#739</a> [Per Djurner]</li>
<li>Removed <code>design</code> mode - [Per Djurner]</li>
<li>Removed <code>cacheRoutes</code> setting - [Per Djurner]</li>
<li>The <code>cacheFileChecking</code> and <code>cacheImages</code> settings are now turned off in development mode - [Per Djurner]</li>
<li>Added <code>includeErrorInEmailSubject</code> setting - [Per Djurner]</li>
<li>Environment switching via URL can now be turned off via <code>allowEnvironmentSwitchViaUrl</code> - <a href="https://github.com/cfwheels/cfwheels/issues/766">#766</a> [Tom King]</li>
</ul>
<h3>Breaking Changes</h3>
<ul>
<li>Minimum Lucee version is now 4.5.5.006.</li>
<li>Minimum ACF version is now 10.0.23 / 11.0.12.</li>
<li>Support for Railo has been dropped.</li>
<li>Rewrite and config files for IIS and Apache have been removed and has to be added manually instead.</li>
<li>The <code>events/functions.cfm</code> file has been moved to <code>global/functions.cfm</code>.</li>
<li>The <code>models/Model.cfc</code> file should extend <code>wheels.Model</code> instead of <code>Wheels</code> (<code>models/Wheels.cfc</code> can be deleted).</li>
<li>The <code>controllers/Controller.cfc</code> file should extend <code>wheels.Controller</code> instead of <code>Wheels</code>(<code>controllers/Wheels.cfc</code> can be deleted).</li>
<li>The <code>init</code> function of controllers and models should now be named <code>config</code> instead.</li>
<li>The global setting <code>modelRequireInit</code> has been renamed to <code>modelRequireConfig</code>.</li>
<li>The global setting <code>cacheControllerInitialization</code> has been renamed to <code>cacheControllerConfig</code>.</li>
<li>The global setting <code>cacheModelInitialization</code> has been renamed to <code>cacheModelConfig</code>.</li>
<li>The global setting <code>clearServerCache</code> has been renamed to <code>clearTemplateCache</code>.</li>
<li>The <code>updateProperties()</code> method has been removed, use <code>update()</code> instead.</li>
<li>Form labels automatically generated based on foreign key properties will drop the "Id" from the end (e.g., the label for the "userId" property will be "User", not "User Id").</li>
<li>Routes need to be updated to use the new routing system by calling <code>mapper()</code>.</li>
<li>JavaScript arguments like <code>confirm</code> and <code>disable</code> have been removed from the link and form helper functions (use the <a href="https://github.com/perdjurner/cfwheels-js-confirm">JS Confirm</a> and <a href="https://github.com/perdjurner/cfwheels-js-disable">JS Disable</a> plugins to reinstate the old behaviour).</li>
<li>Timestamping (<code>createdAt</code>, <code>updatedAt</code>) is now in UTC by default (set the global <code>timeStampMode</code>setting to <code>local</code> to reinstate the old behaviour).</li>
<li>Blank strings in SQL are now converted to null checks (e.g. <code>where="x=''"</code> becomes <code>where="x IS NULL"</code>).</li>
<li>Tags are now closed in HTML5 style (e.g. <code><img src="x"></code> instead of <code><img src="x" /></code>).</li>
<li>The <code>encode</code> argument to <code>mailTo</code> now encodes tag content and attributes instead of outputting JavaScript.</li>
<li>Class output is now dasherized (e.g. <code>field-with-errors</code> instead of <code>fieldWithErrors</code>).</li>
<li>The <code>renderPage</code> function has been renamed to <code>renderView</code>.</li>
</ul>