Release 3.5.0

@seancorfield seancorfield released this Oct 21, 2015 · 121 commits to master since this release

The major new features in FW/1 3.5.0 are:

  • Subsystems 2.0. A new, more streamlined way to add subsystems to an existing FW/1 application has been added. Thank you to Steven Neiland for the inspiration and guiding principles! Read about Subsystems 2.0 and how they differ from the older approach (which is still supported). The examples have been reworked to use Subsystems 2.0 so you can see how it works in practice.
  • An Alternative Application Structure is now supported that allows you to create FW/1 applications that do not require Application.cfc extends the FW/1 component. Read about the Alternative Application Structure. Some of the examples have been updated to use this approach so you can see how it works in practice.
  • Clojure integration. If you have Leiningen installed (Clojure's build tool) then it is very easy to write services and/or controllers in Clojure and have FW/1 automatically integrate those into your CFML application. Read about mixing CFML & Clojure for more details. An example of Clojure integration is provided in the repository (you'll need Leiningen installed for that example to run).
  • ForgeBox / CommandBox support. FW/1 now has a box.json file and is hosted on ForgeBox so it can be easily installed via CommandBox.

In addition to the major features, the following enhancements have been added:

  • redirect() allows queryString to be a struct, like buildURL().
  • isFrameworkReloadRequest() is now public in case an application needs to take action when the framework is reloaded.
  • getSubsystemSectionAndItem() added to supplement getFullyQualifiedAction() (the latter omits the subsystem if it is empty).
  • The WireBox adapter now supports custom binders.
  • The conventions used for various folder names can now be overridden in the framework configuration.

And the following bugs have been fixed:

  • 377 - AOP/1 now allows a single interceptor to be applied to multiple objects.
  • 361 - renderData() could kill sessions (this was backported to 3.1.1).
  • 336 - account for expandPath() returning the wrong directory on ACF11 when the path has a trailing /.

Finally, FW/1 includes experimental support for Lucee Language, so if you are running a prerelease build of Lucee Server that has Lucee Language support enabled, you can write controllers and views etc in .lc or .lucee files and FW/1 will use them.

You can read the full list of changes since 3.1 on GitHub, along with
accepted pull requests since 3.1.