Object-Configure
view release on metacpan or search on metacpan
- Added --exclude lib/Devel --exclude lib/App/Test/Generator/Sample to the
non-ATG-repo generate-test-dashboard call in dashboard.yml (parity with
mutate.yml).
- Fixed empty-BASE guard in mutate.yml (no-op diff when all commits are bot).
- Added conditional $BASE_SHA_FLAG in mutate.yml (avoids passing empty --base_sha).
- Removed || true from all git pull --rebase lines in both workflow files.
- Fixed coverage snapshot to use pre-captured SNAPSHOT_SHA / SNAPSHOT_TIMESTAMP
instead of recomputing git rev-parse after bot commits moved HEAD.
[ Tests ]
- Added t/locales.t: verifies configure() error strings are locale-consistent
under en_US.UTF-8, de_DE.UTF-8, ja_JP.UTF-8 using local $! = ENOENT pattern.
- Updated t/function.t: replaced _walk_isa() subtests with _get_inheritance_chain()
equivalents to match refactored internals.
0.22
[ Bug Fixes ]
- Fixed https://github.com/nigelhorne/Object-Configure/issues/4
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
( run in 0.637 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )