NAME¶
Config::MVP::Assembler::WithBundles - a role to make assemblers expand bundles
VERSION¶
version 2.200008
DESCRIPTION¶
Config::MVP::Assembler::WithBundles is a role to be composed into a
Config::MVP::Assembler subclass. It allows some sections of configuration to
be treated as bundles. When any section is ended, if that section represented
a bundle, its bundle contents will be unrolled and will replace it in the
sequence.
A package is considered a bundle if "package_bundle_method" returns a
defined value (which is the name of a method that will be called on that
package to retrieve its bundle config).
my $method = $assembler->package_bundle_method($package);
The default implementation looks for a method called
"mvp_bundle_config", but "package_bundle_method" can be
replaced with one that returns the name of a different bundle-identifying
method-name.
Bundles are expanded by a call to the assembler's
"replace_bundle_with_contents" method, like this:
$assembler->replace_bundle_with_contents($section, $method);
replace_bundle_with_contents¶
The default "replace_bundle_with_contents" method deletes the section
from the sequence. It then gets a description of the new sections to
introduce, like this:
my @new_config = $bundle_section->package->$method({
name => $bundle_section->name,
package => $bundle_section->package,
payload => $bundle_section->payload,
});
(We pass a hashref rather than a section so that bundles can be expanded
synthetically without having to laboriously create a new Section.)
The returned @new_config is a list of arrayrefs, each of which has three
entries:
[ $name, $package, $payload ]
Each arrayref is converted into a section in the sequence. The $payload should
be an arrayref of name/value pairs to be added to the created section.
AUTHOR¶
Ricardo Signes <rjbs@cpan.org>
COPYRIGHT AND LICENSE¶
This software is copyright (c) 2014 by Ricardo Signes.
This is free software; you can redistribute it and/or modify it under the same
terms as the Perl 5 programming language system itself.