* LightOptionParser will only make one pass through the arguments array.
* Make LOP support multiple instances of an option (-i in1 -i in2)
* Make LOP support indeterminate option argument lengths
(using arguments: "variable" in the definition).
* Add unit tests for LightOptionParser and a testing phase during the `package`
build target.
* Default port is no 80.
* Support for HTTP Basic Authentication.
* Support for HTTPS.
* Support for Content-Type. Defaults to "applicaion/json" but also supports
passing a map to be encoded as "application/x-www-form-urlencoded".
* NonBlockingInputStreamReader now has pause() and resume(). The reader will
stop listening to input when pause() is invoked and will skip all available
input once resume() is invoked, ignoring any buffered input entered while it
was paused.
* Bumped the version to 2.0. This version change should have been made instead
of 1.11, as that was a breaking change, altering the package name of several
classes.
LightOptionParser
-----------------
Lightweight, fairly featureful option parsing mechanism idiomatic to Groovy.
Takes in a map of parameter definitions and returns a map of option values and
arguments.
NullOutputStream
----------------
Ignores all data sent its way.
ParameterizedSocket
-------------------
Added trace and debug logging to the message handling code.
SmartConfig
-----------
Fixed a bug where a property lookup on a non-existent property with no default
given caused a null pointer exception trying to resolve the class of the default
value.
ParameterizedSocket
-------------------
Moved from transmitting a list of strings (represented by ASCII data separated
by ASCII record separators `0x1E`) to a combination of strings and paired
strings. Basically, instead of each record being processed as a whole, a record
may optionall contain the ASCII unit separator `0x1F`. If it does, the record
will be split and treated as a key-value pair. This is implemented in the
`ParameterizedSocket.Message` class.o
LoggerOutputStream
------------------
Was not initializing the internal buffer.
Default behavior in SmartConfig was wrong. What it should be (and now is) is
when a value is requested but not present, the value is set and returned with
the default if given, or null is returned if no default is given.
* Changed the behavior of SmartConfig when setting file type properties. Now it
tries to coerce the given value into a File object if it is not already a File
object.
* Changed the behavior of SmartConfig when retrieving a property without
specifying a default value. Now it returns null if the property is not set and
no default is given.
* Added `SmartConfig.load()` to allow runtime reloading of config.
* Added `WrappedPrinter` which allows you to print horizontally aligned and
offset text blocks in a monotype environment.