Skip to content

Releases: akhoury6/rbcli

v0.4.4

Choose a tag to compare

@akhoury6 akhoury6 released this 19 Mar 11:40

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 base64 as an explicit dependency
  • Removed redundant .select filter in parser on a collection that was already filtered
  • Refactored engine priority check to avoid running the same select query twice
  • Simplified File.expand_path(File.dirname(__FILE__)) to __dir__ in rbcli.rb
  • Added missing # frozen_string_literal: true magic comment to parser.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.rb using .equal? as a bare method call (a no-op) instead of a proper RSpec eq matcher

v0.4.3

Choose a tag to compare

@akhoury6 akhoury6 released this 22 Oct 13:08

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

Choose a tag to compare

@akhoury6 akhoury6 released this 02 May 01:58

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

Choose a tag to compare

@akhoury6 akhoury6 released this 09 May 21:23

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

Choose a tag to compare

@akhoury6 akhoury6 released this 07 May 04:22

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:msg output 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, a lolcat format. Use :display for 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 Configurate block, and subsequent calls to the block can change the parameters at any time
  • 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, and null.
    • 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::Config class 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 env backend 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 :debug when 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/Optimist gem 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::msg helper has been deprecated, as it was only making output more complex. Console output has now been integrated into Rbcli.log
  • The Rbcli.Parse call has been changed to Rbcli.go! as it now starts the execution engine
  • The Configurate::me terminology has been changed to Configurate::<component>, where each component gets its own block.

v0.3.3

Choose a tag to compare

@akhoury6 akhoury6 released this 23 Apr 21:38

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/inline gemfile 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

v0.3.1

Choose a tag to compare

@akhoury6 akhoury6 released this 20 Oct 04:27
f8053c7

v0.3.0

Choose a tag to compare

@akhoury6 akhoury6 released this 30 Jul 22:45
Version 0.3.0

v0.2.10

Choose a tag to compare

@akhoury6 akhoury6 released this 05 Feb 15:40
Version 0.2.10