Into The Box Conference is back for another round

Into The Box

We are excited that Into The Box is coming back for another round in 2015.  ITB is a 1-day, 2-track conference happening the day before dev.Objective().  It was sold out last year and can only get bigger and better.

ITB is put on by Ortus Solutions, the makers of the ColdBox MVC platform.  While ColdBox is the flagship product of Ortus, their repertoire has grown to include tunes of CMSs, NoSQL, security, and performance.  Many of the hits on Ortus' playlist such as WireBox, CacheBox, LogBox, and CacheBox got their start in the ColdBox platform before they set out on their own.  They're available to any CFML developer these days, but we'll always consider them part of our family.  

So it's only fitting that ITB will not only be about ColdFusion's de-facto MVC platform but about the full line of productivity tools offered by Ortus-- most of which are open source like ColdBox.  We're still busy hashing out the exact topic titles and if you have suggestions or are open to actually presenting a session, check out the call for speakers over on the ITB blog.  

For the rest of you, the registration form for ITB 2015 is already open so head on over and get your ticket now.  Also, watch for discounts coming soon for dev.Objective() attendees.  See you there!

 


TestBox BDD v2.1.0 and MockBox Released!

CommandBox, MockBox, News, Releases, TestBox

We are so excited to bring you TestBox 2.1.0 and MockBox 3.1.0!  These releases are minor releases of our libraries and include not only great features but a slew of fixes.  You can read all about the exciting features in our What's New Guide!  They have also been integrated with CommandBox, our new ColdFusion CLI and package manager, to allow you to download, install and even execute tests in the command line.  We have also made available our integration server builds which can also be installed via our CLI.

You can now do this to install TestBox or MockBox.

// install testbox
box install testbox

// install testbox bleeding edge
box install testbox-be

// install mockbox
box install mockbox

// Execute tests
box testbox run runner="runner path"

// Generate a bdd spec
box testbox create bdd MySpec

 

Release Notes

Bugs Fixed

  • [TESTBOX-96] - isEqual on Query fails when queries are equal
  • [TESTBOX-97] - equalize fails on struct/objects/arrays when null values exist within them
  • [TESTBOX-98] - Floating Point Number isEqual Fails
  • [TESTBOX-100] - Specs with the same name cause thread name exceptions when using async
  • [TESTBOX-101] - Download file has "samples" instead of "tests" directory
  • [TESTBOX-102] - tobe() cannot handle sparse arrays on Adobe CF
  • [TESTBOX-103] - xUnit compatibility CF9 broken due to isClosure() being utilized
  • [TESTBOX-105] - skip closures get more metadata arguments when being executed.
  • [TESTBOX-115] - testbox errors when using complete null support in railo

Improvement

  • [TESTBOX-40] - Have debug() include information about where it came from
  • [TESTBOX-95] - remove extra whitespace in text reporter
  • [TESTBOX-110] - Remove CF7,8 incompatibilities
  • [TESTBOX-118] - ColdFusion 11 cfinclude compatibilities

New Feature

  • [TESTBOX-106] - BDD run() method now receive the TestResults argument for usage in their definitions.
  • [TESTBOX-107] - BDD runner and specs receive reference to the TestBox calling class via the run() method
  • [TESTBOX-108] - Update the apidocs with our new DocBox skin
  • [TESTBOX-109] - Debug labels and telemetry additions
  • [TESTBOX-112] - Add "top" attribute to debug method
  • [TESTBOX-114] - HTMLRunner add big request timeout setting to avoid server cut offs
  • [TESTBOX-116] - have expectations assertions return the expectation to allow chaining
  • [TESTBOX-117] - Simple reporter includes now a test bundle filter
  • [TESTBOX-119] - New lifecycle method: aroundEach() so you can do a full AOP advice on any spec

 

Resources

 


New Compatibility Module released to help get you on ColdBox 4.0

CommandBox, Modules, Releases

ColdBox 4.0 is now in Release Candidate and we're tightening down all the screws for the big release.  As 4.0 is a major release of the platform, we've taken the opportunity to really clean up the code, making changes and improvements where necessary.  This includes the exodus of 75% of ColdBox's core code into pluggable modules so you can truly pick and choose what parts of the framework you want.  Some methods such as getPlugin() and getColdBoxOCM() were also removed.  This has naturally modified the framework's API a bit and your 3.x ColdBox app might not run without some tweaking.  

We have a What's New doc as well as a Compatibility Guide for ColdBox 4.0 where we have tried to document any changes necessary to get your codebase switched over.  However, we realize that some of this may take time for you to refactor if you have a larger codebase and we don't want it to keep you from looking at ColdBox 4.0  

That's why I've created a compatibility module for ColdBox 3.x code bases to help them run on the new 4.0 version of the ColdBox platform.  We feel this is a  much better solution than littering the core codebase with additional settings and feature flags.  ColdBox is the only framework with a first-class modular architecture.  Mix that with the incredible extensibility options, and this module has be ability to alter just about anything it wants.  

Only install it if you need it, and remove it once you're finished refactoring your code to the 4.0 standards.  This isn't meant to be a permanent install-- it's just a stepping stone to help you get your codebase up and running until you have time to finish refactoring.  Do feel free to use it in production, though it comes with no warranties or guarantees.  Here's a list of the modifications this module will make to ColdBox 4.x to make it work like the 3.x versions.

Functions and behaviors restored

  • Original getModuleSettings() behavior
  • getPlugin() function
  • getMyPlugin() function
  • getColdBoxOCM() function
  • UDFLibraryFile setting
  • "model" convention for WireBox scan locations
  • coldbox.system.plugin base class

The following WireBox mapping DSL namespaces are restored

  • ocm
  • ocm:{keyName}
  • coldbox:plugin:{pluginName}
  • coldbox:myplugin:{pluginName}
  • coldbox:myplugin:{pluginName@moduleName}
  • coldbox:fwconfigbean
  • coldbox:configbean
  • coldbox:cacheManager
  • coldbox:mailsettingsbean (requires mailservices module)
  • coldbox:debuggerService (requires cbdebugger module)
  • coldbox:validationManager (requires validation module)

This module also comes packaged with all the original ColdBox 3.8.1 plugins, so you only need to install this module and you'll have it all back again.   If you need any of the functionality that was refactored into modules such as ORM, validation, or i18n, just install those modules.  

Known issues:

  • When this module loads, it will copy Plugin.cfc to the coldbox/system directory.  If you uninstall this module, it will not remove that file.
  • Plugins only work for the default convention location of "plugins". 
  • You will still need to change the Application.cfc to use coldbox.system.Bootstrap instead of coldbox.system.ColdBox.  There's really no way around that one.

Installation

The preferred way to install this module is via CommandBox because using a package manager is just so fast and easy.  If you don't have Command Box, grab it real quick from here.  Then CD to your site's web root and run the following:

CommandBox> install cbcompat

If you want to do an old-fashioned installation, just click the download link from ForgeBox, and uncompress the contents of the zip file into your app's modules directory.

If you have questions or suggestions, hit me up on the ColdBox list, or feel free to submit a pull request.


ColdBox 4.0 Release Candidate Avaialble

Releases

We've been hard at work on on ColdBox 4.0 ever since we announced the public roadmap back in February.  There has been two good rounds of feedback in our Alpha and Beta cycles and we are pleased to announce the general availability of our first release candidate for ColdBox 4.0.

ColdBox 4.0 is a major release of the software with a completely revamped core that's seen a complete modularization of 75% of of the features.  That means ColdBox is now leaner, faster, and more focused.  Don't worry, all your  favorite libraries are still available to you, but they've been moved to ForgeBox and you can install them easily with our new CLI and package manager CommandBox.

Please take ColdBox 4.0 out for a spin and kick the tires.  If  you're currently using an older version of ColdBox, start by reading our Compatibility Guide here:

http://wiki.coldbox.org/wiki/Compatibility:4.0.0.cfm

You can also get a leg up on the long list of the new features on our What's New page here:

http://wiki.coldbox.org/wiki/WhatsNew:4.0.0.cfm

Once you're ready to give it a spin, download ColdBox 4.0 Release Candidate from the "Upcoming Release" portion of our download page:

http://www.coldbox.org/download

Or better yet, fire up CommandBox, CD into your web root and run

install coldbox-be

And as usual, please report any issues or questions you have to our Google Group.

 

 


Thanks for making ColdBox Developers Week 2014 a success!

ColdBox Developer Week

As we're recovering from our third annual ColdBox Developers Week, we'd like to give a shout out of thanks to everyone who participated.  From our sponsors, to the speakers and the attendees; everyone helped play a part in making these 21 training sessions fun and informative.  We hope everyone had as much fun learning as we did putting this on.

Prizes

Thanks to our sponsors, Ortus Solutions and Computer Know How, we had tons of prizes to give away. Here's a recap of the winners.  Congratulations!

Furthermore, we offered additional prizes to the first two people to submit new packages to ForgeBox-- CFML's newest and most comprehensive code repository.  The following two people stepped up:

Recordings

The most common question I've gotten is, "Was this session recorded?"  The answer is, YES!  Every session including our special guest session by Gert Franz of Railo was recorded and is posted along with the slide decks over on the CBDW 2014 recording page.

http://www.coldbox.org/media/cbdw2014

Resources

Hopefully you came away from CBDW excited to try out some of the tooling you learned about.  We're here to help you with that.  Here's some links for you to get started:

Donate

Ortus Solutions spends a lot of time putting on free training for the CFML community.  If your company benefited from this free event, please consider donating back so we can do even more free stuff for the CF community.

Secure Donation via PayPal


CBDW Bonus Session with Gert Franz on the Future of Railo

ColdBox Developer Week

ColdBox Developers Week has been progressing along nicely with one great session after another.  We're excited to announce that we've finalized a special BONUS session presented by guest speaker Gert Franz!  Gert will be sharing about the exciting future of Railo including what we have to look forward to in Railo 5.  Railo is an open source CFML engine and if you're using it you'll want to come see what's in store.  But even if you're not a Railo user, you'll still want to see what great innovations are happening over in Switzerland that are driving the CFML community forward and keeping us relevant.

This extra session will begin 1 hour before the first slot Friday morning (the 26th) which is 8am Pacific time.  The bonus session will be held in the same Adobe Connect room which is located here:

https://experts.adobeconnect.com/cbdw2014

We will record the session and post it to our recording page.  Please show up and join in the fun!


Announcing ColdBox Developer Week 2014

ColdBox Developer Week

 

We are pleased to announce that ColdBox Developers Week (CBDW) is back for the third year now.  CBDW is a full week of completely free webinars (4-a-day) put on by Team ColdBox and other smart ColdFusion bods from around the world.  We've got some great topics this year that will discuss NoSQL, ColdBox 4.0, ContentBox CMS, and our newest project: CommandBox.  Sign up and come to as many sessions as you like.  We'll also be recording every session as well for you to watch afterwards if you can't make it during the scheduled time.

So, here's the details.  CBDW will  be happening THIS month, September 22nd-26th.  There will be four sessions each day that week starting at 11am, 1pm, 3pm, and 5pm Central time.  Want to know what that is in your time zone?  Head over to our site where we have every time zone in the world including yours (based on your IP address).

But wait there's more!  As if the training itself isn't enough, we're going to sweeten the deal with some free giveaways.  During the last session of each day, we're going to randomly select a winner from the full list of registrants to get one of these (one prize per day):

  • $50 Amazon gift card
  • $50 Amazon gift card
  • Sublime Text license ($70 value)
  • DataBoss Standalone license ($149 value)
  • DataBoss Standalone license ($149 value)

 

A big thanks to our sponsors Ortus Solutions and Computer Know How for donating these prizes.

 

Register Today   View Schedule


ColdBox 4 & CommandBox Beta have arrived!

CommandBox, ForgeBox, News, Releases

 

After almost half a year worth of work, we are finally here, ColdBox 4 & CommandBox CLI Beta have arrived.  For those of you who don't know what CommandBox is, CommandBox is our very own ColdFusion (CFML) Command Line Interface, package manager, REPL and recipe runner.  It connects to our ForgeBox online community for package repositories, installation and tracking.  It also has a very extensible commands interface that allows any CFML developer to contribute commands into CommandBox.  It ships with tons of commands for Coldbox 4 integration as well as the other boxes.  Check out the product pagedocumentation and Command API docs as well.  You can also check out the intro video below:

 

ColdBox 4 Major Features

So what's going with ColdBox 4.  ColdBox 4 is a major release in our ColdBox Platform series and includes a new revamped MVC core, extreme focus on Modularity and all extra functionality has been refactored into ColdBox modules. We have pushed the modular architecture to 1st class citizen even in the core itself. There are several compatibility updates that you must do in order to upgrade your ColdBox 3.X applications to CodlBox 4 standards. You will notice that the source and download of ColdBox 4 has been reduced by almost 75% in size. This is now due to our modular approach were functionality can just be brought in dynamically via CommandBox.  This has in turn made our release the smallest, fastest and most flexible ever. For in-depth guide, check out the What's New with ColdBox 4.0.0 guide and our Compatibility Guide.  Here is a breakdown of the major updates for this release.

Read More...

Converting Fusebox 5.1 Sample App to ColdBox MVC - Part 2

Sample Apps, Tips & Tricks, Tutorials, Walkthroughs

This is the second half of our two-part conversion of a FuseBox 5.1 sample app to ColdBox MVC.  If you haven't been following our blog series on converting your legacy FuseBox apps over to ColdBox MVC you may want to back up and read the previous post first..  In that post we took a look at the different files in each version of the app.  We talked about how each framework bootstraps itself up, as well as settings and circuits/handlers.  We'll pick up right were we left off in this post and finish off the code by looking at how we converted the views, models, and error handling.

Views

ColdBox will automatically look for a view file named after your action in a folder named after your handler.  Of course, all this happens in our "/views" convention folder.  You are free to name your view files whatever you want though.  Just use the following code to tell the framework what view to include:

// Include /views/randomFolder/randomFile.cfm
event.setView( "randomFolder/randomFile" );

Our views are almost identical.  There are two main differences.  The first is that our views "get" data from the handler by accessing the readily-available rc (request collection) and prc (private request collection) scopes.  rc is used for any input from the user via FORM or URL scopes.  prc is for any other data the handler wants to pass along to the view.  The second is in how we build links.

/view/listEmails.cfm

<a href="#self##xfa.conform#">Return to Connect Form</a>

/views/list.cfm

<a href="#event.buildLink( prc.xeh.conform )#">Return to Connect Form</a>

ColdBox gives you a nice helper method in the event object to build links for you.  It automatically handles HTTPS, the base domain, app mapping, and query string.  event.buildLink() can also generate SES URLs with no changes when you have it enabled.

Layouts

ColdBox layouts are placed in a folder called /layouts by default and unless you've specified something else, will look for a file called Main.cfm.

/layouts/Main.cfm

<cfoutput>
	<html>
		<head>
			<link href="/includes/getmymail.css" rel="stylesheet" type="text/css" />
		</head>
		<body>
			#renderView()#
		</body>
	</html>	
</cfoutput>

The renderView() call is where the output from the view will be placed.

Model

Your models are your services, beans, and DAO that represent the business logic in your application.  In ColdBox, these go under a folder called /model.  I created a MailService.cfc which encapsulates getting a list of messages and getting a single message.  

/model/MailService.cfc

component singleton {
	property name="attachmentPath" inject="coldbox:setting:attachmentPath";
	property name='sessionStorage' inject='coldbox:plugin:sessionStorage';
	
	function getAllMessages( required numeric start	) {
		// Get connection Info
		var connectionInfo = sessionStorage.getVar( 'connectionInfo' );
		
		return new pop().getHeaderOnly(
			server = connectionInfo.serverName,
			username = connectionInfo.userName,
			password = connectionInfo.password,
			port = connectionInfo.serverPort,
			maxrows = connectionInfo.msgsPerPage,
			startrow = arguments.start
		);
	}
	
	function getMessage( required string uid ) {
		// Get connection Info
		var connectionInfo = sessionStorage.getVar( 'connectionInfo' );
				
		return new pop().getAll(
			server = connectionInfo.serverName,
			username = connectionInfo.userName,
			password = connectionInfo.password,
			port = connectionInfo.serverPort,
			uid = arguments.uid,
			attachmentpath = attachmentPath,
			generateuniquefilenames = true
		);
	}	
}

Note the singleton annotation at the top in the component definition.  This tells WireBox to only create one instance of this service that the entire application shares.  I'm also using properties to inject a reference to my attachmentPath setting as well as the sessionStorage plugin again.  No configuration is necessary for WireBox to find the MailService CFC since we've placed it in the /model convention folder.  Unfortunately, I found that Railo doesn't support the same script syntax for the CFPOP tag so I also created a RailoMailService.cfc file in the /model folder and created the following WireBox configuration file.

/config/WireBox.cfc

component extends='coldbox.system.ioc.config.Binder' {
	function configure() {		
		// Use this to detect the CFML engine
		var CFMLEngine = new coldbox.system.core.util.CFMLEngine(); 
		
		// Railo uses a different script syntax
		if( CFMLEngine.getEngine() == CFMLEngine.RAILO ) {
			// This will override the default MailService mappings
			map( 'MailService' ).to( 'model.RailoMailService' );		
		}
		
		// No "else" needed for Adobe CF. WireBox will simply "find" the 
		// "MailService" CFC in the "/model" folder automatically.		
	}
}

This file uses a utility built into ColdBox called CFMLEngine to detect the engine in use and conditionally overwrite the MailService mapping to point to the Railo version.

Error Handling

In the FuseBox code, there are try/catches around a lot of code in the "model" files.  If an error occurs, a custom error page is included.  

<cftry>
<cfpop  .../>
	<cfcatch>
		<cfinclude template="../view/error/connectionError.cfm" />
	</cfcatch>
</cftry>

What if an error occurs somewhere else in the request though?  What if you add new code and forget to wrap it in a try/catch.  Even worse, what if you decide to rename your error template after it's referenced everywhere?  In ColdBox, error handling is built in.  All of your code is run in a try/catch at the framework level, and there's a nice default error template that displays.  In your production settings though, you'll want to override this to a more secure page that doesn't divulge information with the customErrorTemplate setting.

customErrorTemplate = "includes/templates/oops_sorry.cfm"

You can read more about the exception handling provided to you in ColdBox here.

Conclusion

To see all the code, please visit this repo on GitHub: https://github.com/bdw429s/FuseBox-5.1-Sample-App-Conversion

This sample app was a little more involved than the last one, and hopefully everything makes sense even though I included a lot more code.  If clone the Git repo you can unzip the FuseBox code and open them side by side.  Please comment below if you have any questions or suggestions, and here's our list of handy resources:

 

 


Brad Wood Presenting on ColdBox to Chicagoland User Group 8/13 @ 6:30pm Central

Presentations

This August 13th at 6:30 pm Brad Wood will be presenting an introduction to the ColdBox MVC Platform to the Chicagoland user group.  If you're in the area, please attend in person.  For everyone else, I'll be presenting via Adobe Connect and you can join the room to listen in.

Read More...

Categories


Recent Entries

Entry Archives

 



Training Events

ColdBox CFML Jobs

ColdBox Book

book