> I ended up making a base.cfc, which extends commandbox.system.BaseCommand, then all the sub cfc’s extend that with super.init() to grab the variables scope. Bad idea? or ok?
I don’t see anything wrong with that. I would remove the run() method or at least set excludeFromHelp=true in the component declaration so it doesn’t show up in 'help".
You can also create service CFCs in your command directory that aren’t commands but contain shared functionality. Unfortunately, I don’t think we have a way right now to ask WireBox for them. For what it’s worth, I’m not too happy with how commands work right now and I wanted to update it, but it got deferred to a later version: https://ortussolutions.atlassian.net/browse/COMMANDBOX-121
> I see there’s a designated temp folder in .commandbox - is that ‘safe’ to use for custom functions?
Yep, you can use it. Just inject the path like so:
property name=“tempDir” inject=“tempDir@constants”;
> Does it get cleared out any point?
I don’t think so. I always clean up after myself if I put anything in there, but don’t ever reply on stuff persisting there across restarts.
> Ditto for local caching - we’ve got a XML plugin list which gets downloaded
For caching the return of ForgeBox REST API calls, I just set the data into the variable scope of the forgebox service: https://github.com/Ortus-Solutions/commandbox/blob/master/src/cfml/system/util/ForgeBox.cfc#L76
Now, that said, we already have WireBox under the hood. It wouldn’t be hard to add in CacheBox-- especially since one of the stand-alone distributions of WireBox actually includes CacheBox.
> Is there a way to do (essentially) a cfdump to console
Yes, and it’s actually built into CFML 
writeDump( var=[1,2,3], output=“console” );
You can also serialize as JSON before passing through the print object. And if you want some pretty formatting, do this:
print.line( formatterUtil.formatJson( serializeJSON( tree ) ) );
Also, keep in mind LogBox is also configured for you to use for debugging purposes (It’s part of WireBox). Just inject like so:
property name=“logger” inject=“logbox:logger:{this}”;
And use it like this:
logger.debug( “Here’s some information I’d like to log.” );
The log file for CommandBox is found under .CommandBox/logs/commandbox.log
If you want to log from a service, where there’s no print command, we have a special named logger called “console” that will append to the consule anything that’s logged to it. Check out the PackageService for examples of this in use.
> What’s the best way to read a file, and then find a line and extract it’s value?
It depends on the file format
If you have control over the file’s format, I would use an existing standard like a property file, XML or JSON and just use the inbuilt features of CFML to parse the files. For any other scenarios, you have the full power of CFML at your finger tips. Write whatever you want!
The PackageService has a number of functions for dealing with the box.json file, but there’s nothing else in particular written in.
On this note, we have planned to have a global settings file for CommandBox ( and associated service/commands to interact with them) but we haven’t actually built that yet. Perhaps we should also build a way for a command or namespace to have it’s own collection of persistent settings. Also, for what it’s worth, box.json can have anything set in it as it’s just JSON, just remember that it’s specific to the package, not global to the CommandBox installation.
> Sorry for the questions
No apologies needed at all. I’m super pumped to see people digging in and playing with this stuff 
Thanks!
~Brad
ColdBox Platform Evangelist
Ortus Solutions, Corp
E-mail: brad@coldbox.org
ColdBox Platform: http://www.coldbox.org
Blog: http://www.codersrevolution.com