Revision history for Object::Configure - Runtime Configuration for an Object
0.21 Thu May 21 07:55:13 EDT 2026
[Bug Fixes]
- Bump minimum version of Params::Get and Config::Abstraction
0.20 Tue May 19 08:51:20 EDT 2026
[Enhancement]
- Improve the method documentation
[Bug Fixes]
- Fixed disable_hot_reload() hanging indefinitely when child process does not exit on SIGTERM
During mutation testing the forked watcher process can be left in a state where it never receives or acts on SIGTERM, causing waitpid to block forever.
The fix replaces the unconditional waitpid with a non-blocking poll loop with a 5-second deadline, then escalates to SIGKILL if the child is still alive, followed by a final waitpid that is safe because SIGKILL cannot be caught or deferred.
- Fixed configure() logger dispatch ignoring NULL and re-wrapping existing Log::Abstraction instances
- Fixed looking in the correct directory for a object class to reload
- Fixed _reload_object_config() to use full config file paths during hot reload.
Previously attempted to reload from basename only (e.g., 'app.yml') instead
of full path stored in _config_files array. This caused -f test to fail and
reload to silently return without updating object properties or calling
_on_config_reload hooks. Now uses the last (most specific) path from
_config_files array when available, falling back to _config_file for
backward compatibility. Added explicit return statement for consistency.
- Sanity check that class is given to configure()
- Fixed register_object() to return void consistently.
Previously returned a coderef on first call (from $SIG{USR1} assignment),
undef on Windows, and false on subsequent calls. Now explicitly returns
nothing via 'return;' at end of function to match API specification.
- Fixed restore_signal_handlers() to return void consistently.
Previously returned undef when handler was defined and empty list when
not defined. Now explicitly returns nothing via 'return;' at end of
function to match API specification.
- Automatically preserve coderefs and blessed objects passed to configure().
Config::Abstraction treats unknown scalar values as config file paths,
which corrupts coderef and object references. The configure() function
now automatically stashes these values before processing and restores
them afterward, eliminating the need for users to implement manual
stash-delete-restore patterns in their constructors. The logger
parameter continues to receive special handling for wrapping in
Log::Abstraction. Added comprehensive test suite (t/coderef.t) to
verify preservation of coderefs and blessed objects.
- Fixed _deep_merge() to correctly return overlay value when overlay is not a hash.
Previously returned base value instead of overlay, violating the principle
that overlay should always take precedence. Changed line to
'return $overlay unless ref($overlay) eq "HASH"'.
- Fixed logger='NULL' handling to prevent unwanted logger creation.
When logger parameter was set to 'NULL', code would skip wrapping but fall
through to else clause which created a default Log::Abstraction anyway.
Restructured logic to explicitly check for 'NULL' first and preserve it
without creating any logger. Also optimized to avoid dereferencing
$params->{'logger'} twice by using the already-assigned $logger variable.
- Comprehensive POD documentation updates for all public methods.
Added detailed documentation for configure(), instantiate(),
enable_hot_reload(), disable_hot_reload(), reload_config(),
register_object(), restore_signal_handlers(), and get_signal_handler_info().
Each method now includes Purpose, Arguments, Returns, Side Effects, Notes,
Usage Example, API Specification (Params::Validate::Strict compatible
input schema and Return::Set compatible output schema), and Formal
Specification (Z notation). Added comprehensive white-box test suite
(t/function.t) covering all public and private functions.
0.19 Fri Dec 12 08:07:32 EST 2025
[Enhancement]
- Added UNIVERSAL configuration inheritance support.
All classes now automatically inherit from a universal.yml (or .conf,
.json, etc.) configuration file if present. This allows application-wide
defaults to be set once and inherited by all classes unless explicitly
overridden. Modified _walk_isa() to explicitly include UNIVERSAL in the
inheritance chain for classes with no explicit parents. Added test suite
(t/universal.t) to verify UNIVERSAL inheritance across multiple classes
and inheritance levels. Updated POD with UNIVERSAL CONFIGURATION section.
0.18 Thu Dec 11 11:58:01 EST 2025
If a parent class hierachy can't be found, ensure we still load the given path/file
0.17 Sat Dec 6 21:31:58 EST 2025
Load in parents classes as well
Don't assume English - fixes https://www.cpantesters.org/cpan/report/b1624b76-ad2b-11f0-852b-311a6e8775ea
0.16 Thu Oct 16 19:10:49 EDT 2025
Set croak_on_error
Latest testing console
0.15 Wed Sep 17 07:28:24 EDT 2025
Allow the logger to be NULL, in which case nothing is set up
Scalar::Utils was used but not imported
instantiate: avoid double blessing
Added testing dashboard on GitHub Pages
Pass schema through to Config::Abstraction
Added configuration hot reloading without restarting the application (not supported on Windows)
0.14 Wed Aug 27 13:16:36 EDT 2025
Allow the params to be undef
0.13 Wed Aug 20 09:39:00 EDT 2025
Ensure it works with Log::Abstraction 0.25 and bump to use that
Also fixes https://github.com/nigelhorne/Object-Configure/issues/2
0.12 Fri Aug 1 08:20:23 EDT 2025
Use Return::Set
Allow carp_on_warn to be read from the configuration file, and change the default to 0
0.11 Mon Jul 21 08:06:15 EDT 2025
Avoid encapsulating Log::Abstraction within Log::Abstraction
0.10 Wed Jun 18 14:54:59 EDT 2025
Use Config::Abstraction 0.10 to test environment settings
0.09 Wed Jun 18 09:09:58 EDT 2025
Fix tests in other languages
0.08 Fri Jun 6 08:35:54 EDT 2025
Removed a bunch of unneeded pre-reqs
Added the instantiate method
0.07 Thu May 29 09:35:38 EDT 2025
Renamed from Class::Debug to Object::Configure
Get the Abstract from the PM file
Give better error message
0.06 Thu May 22 21:11:29 EDT 2025
Ensure loggers aren't lost when it's a simple list
0.05 Tue May 20 21:21:09 EDT 2025
Fix CI
0.04 Tue May 20 21:14:56 EDT 2025
Try harder to avoid a logger hash within a logger hash
0.03 Fri May 16 11:45:00 EDT 2025
Added CI support
Added better reporting on error
Use the features of Config::Abstraction 0.25
0.02 Wed May 7 17:08:29 EDT 2025
Fix the return value
Added testing
0.01 Wed May 7 16:42:04 EDT 2025
First draft