Releases: akhoury6/rbcli
Releases · akhoury6/rbcli
Release list
v0.4.4
0.4.4 (Mar 19, 2026)
Improvements
- Updated minimum required Ruby version to 3.4.0
- Switched all dependency version constraints to open-ended (
>=) and updated minimum versions - Added
base64as an explicit dependency - Removed redundant
.selectfilter in parser on a collection that was already filtered - Refactored engine priority check to avoid running the same
selectquery twice - Simplified
File.expand_path(File.dirname(__FILE__))to__dir__inrbcli.rb - Added missing
# frozen_string_literal: truemagic comment toparser.rb - Fixed typo "Compatiblity" → "Compatibility" in helptext banner
Bugfixes
- Fixed logger method definitions generated by a
%w()list with commas, which produced invalid method names like:"debug,"instead of:debug - Fixed
!=comparison being used instead of+=concatenation in the parser's interactive prompt, causing the default value hint never to be displayed - Fixed command name validation regex not being anchored, which allowed invalid names containing special characters to pass validation
- Fixed test assertion in
gem_spec.rbusing.equal?as a bare method call (a no-op) instead of a proper RSpeceqmatcher
v0.4.3
0.4.3 (Oct 22, 2025)
Improvements
- Improved efficiency of string compression by using
Base64.strict_encode64 - Added an option to write annotations to skeleton rbcli gems
- Added an option to exit when using Logger.fatal
Bugfixes
- Fixed an error which caused the rbcli initializer not to generate skeleton projects
v0.4.2
0.4.2 (May 1, 2025)
Features
- Config can load schema directly from a hash instead of a file
- Config can use a skeleton (prepared text) for creating missing config files instead of defaults
- Config create! can now be given a path to save the config file at
Improvements
- Config file declaration now uses simpler syntax
- Component plugin format has been given hooks to make them easier to develop
Bugfixes
- Compatibility list in helptext did not display commas in line with correct grammar
- Fixed a bug that prevented declaring a command the "default" unless it was the first command declared
- Config validation sometimes provided false positives when provided with a schema hash rather than a schema file
v0.4.1
0.4.1 (May 10, 2024)
Features
- A "compatibility" field has been added to the CLI helptext configuration
- A skeleton config can be defined, rather than relying on individual default values.
Improvements
- Test coverage has been increased to include all of the config functionality
Bugfixes
- Config type selection had edge cases where null configs would be created when errors were supposed to be thrown
v0.4.0
0.4.0 (May 7, 2024)
This release is a major refactor! Nearly all of the codebase has been rewritten from the ground up. This brought lots of features and improvements, with a heavy focus on making the framework easier to understand and use. It's memory footprint has been reduced, and execution time has sped up too.
NOTE: The license for this version has been changed from GPLv3 to MIT.
Features
- Console and Logfile Output
- The
Rbcli:msgoutput and the Logger output have been combined into just the Logger - The logger now has more flexibility to be used as either console output or to format everything for a logfile
- The logger has become a lot more powerful. It can now output in several different preconfigured formats, including
:display, :simple, :full, :standard, :json, :apache, and just for fun, alolcatformat. Use:displayfor output meant to be viewed by a user on a command line. - Custom log formats can also be defined just by passing a proc.
- Configuration for the logger has been simplified to one single line in the
Configurateblock, and subsequent calls to the block can change the parameters at any time
- The
- Config Files & State Storage
- Rather than these features having two separate features sets, they have been merged into a single feature with the capabilities of both
- Config files can now be saved at any time, and support additional types. Supported types are now:
yaml,json,ini,toml, andnull. - A banner may be defined that gets written to the config file as a comment when using a backend that supports them
- Config files have built-in validation when provided a Json-Schema. This validation works on all backends.
- The primary config is accessed via the Configurate block, where defaults can be set, with options to generate the file automatically if it doesn't exist and save it if it gets modified
- Additional configs may be created by instantiating the
Rbcli::Configclass directly - A config may have more than one location/path defined for a hierarchical search. For example, setting the locations to
['~/.config', '/etc/config']will use the home folder one if available but fall back to the system-wide one if it isn't - A
envbackend was also added with its own unique integration, to enable automatic parsing of environment variables. This backend is given it's own config block in Rbcli to inject the environment variable data into commands.
- Component Architecture & Execution Engine
- All features of Rbcli have been designed around a new modular architecture. This has simplified the codebase tremendously, making future work and expansion easier
- The core of Rbcli is no longer lazy-loaded, allowing for a simpler code base without any detrement to 99% of users
- Non-essential features remain lazy loaded to keep the memory footprint and startup times down
- Components can now register methods to be run at any stage of execution within the engine, this way the engine does not need to be modified directly when features are added
- Commands & Shell Scripts
- A command may now be specified as the default, executing it when no other command is specified on the command line. This enables the creation of tools without sub-commands
- Shell script commands can now be defined inline in a command, rather than requiring a separate file
- Shell script commands now have their outputs captured and send to the same log/stream that the rest of the program output goes to
- Shell script commands now integrate tightly with the logger, where messages can be output in different log severities
Improvements
- Tests
- Tests have been added for much of Rbcli, and more are coming. Now that this project is growing, the goal is to have as much coverage as humanly possible.
- Performance
- The engine has been rewritten to speed up execution. Rather than lots of checks and hooks to see which options need to be called, configured options can inject the functions that need to be executed when the engine runs. This significantly reduces execution time
- Developer Experience
- Getting started has never been simpler, as the required configuration has been brought down to simply declaring a commmand
- The projects generated are a lot simpler to use. In addition, the generator has been simplified and is a lot easier to use.
- Built-in error types have now been created to help describe errors within the rbcli framework itself, along with vastly improved error handling
- Lots of descriptive logs have been added throughout the framework, making it easy to track what your application is doing. Just set the log level to
:debugwhen initializing the logger - Naming conventions are now more in line with the functions being performed
- Deprecation warnings now get displayed as soon as the code reaches the declaration, as this is more reliable than attempting to aggregate them prior to execution
- Checks have been added to better ensure that a declared configuration is valid, reducing unexpected errors during usage
- Documentation
- The documentation site has been re-created with a fresh Hugo project and a modern, updated version of the theme
- The code annotations when initializing a new project/executable have been made simpler and clearer
- All of the documentation has been re-written for the new, updated Rbcli
- Scripts have been added to help automatically pull in the Changelog and Readme into the site on release
- The contribution guide and tooling has been updated to make contributing easier
- More stuff
- The project initialization code has been simplified, making the resulting files a lot more consistent
- The update check feature has sane and descriptive default messages that get displayed when an update is available
- The parsing method has been changed to allow for more control over output. Helptext is now sent over the same stream as all other text, and CLI option parsing errors are captured and sent to logs
- Options & parameters now use an enhanced version of the
ManageIQ/Optimistgem as a backend. This allows for more options configurations than were previously possible - Autoupdates were aptly renamed to update checks since they did not perform the update automatically
- Custom log formats can now be defined on the fly
Bugfixes
- Under certain conditions, the update check would throw an exception rather than check the version numbers correctly. This has been fixed and the updater now fails silently when it can't perform a proper comparison.
- Rather than fail, the update checker now informs the developer when the configuration for update checks is invalid
- Commands can no longer combine "action", "extern", and "script" in the same command, as this could lead to unexpected behavior with remote execution
- The pre- and post- hooks used to get defined and executed twice under certain circumstances. This has been corrected.
Deprecations
- The
Rbcli::msghelper has been deprecated, as it was only making output more complex. Console output has now been integrated intoRbcli.log - The
Rbcli.Parsecall has been changed toRbcli.go!as it now starts the execution engine - The
Configurate::meterminology has been changed toConfigurate::<component>, where each component gets its own block.
v0.3.3
0.3.3 (April 24, 2024)
Improvements
- Tested with Ruby 3.3.0
- Updated dependencies for Ruby 3.3.0
- Updated dependnecies for Sekeleton projects
- Added a
bundler/inlinegemfile on mini and micro skeleton projects to simplify their use - Replaced deprecated Trollop gem with its replacement, ManageIQ/Optimist
Bugfixes
- Updated deprecated ERB call for skeleton generation to use new format