Acrux
view release on metacpan or search on metacpan
lib/Acme/Crux/Plugin/Config.pm view on Meta::CPAN
package Acme::Crux::Plugin::Config;
use warnings;
use strict;
use utf8;
=encoding utf-8
=head1 NAME
Acme::Crux::Plugin::Config - The Acme::Crux plugin for configuration your application
=head1 SYNOPSIS
# In startup
my $config = $app->plugin('Config');
my $config = $app->plugin('Config', undef, {file => '/etc/myapp.conf'});
# In application
my $val = $app->config->get("/foo/bar/baz");
my $all = $app->config->conf;
my $array = $app->config->array('/foo'); # 'value'
# ['value']
my $hash = $app->config->hash('/foo'); # { foo => 'first', bar => 'second' }
# { foo => 'first', bar => 'second' }
my $first = $app->config->first('/foo'); # ['first', 'second', 'third']
# first
my $latest = $app->config->latest('/foo'); # ['first', 'second', 'third']
# third
=head1 DESCRIPTION
The Acme::Crux plugin for configuration your application
=head1 OPTIONS
This plugin supports the following options
=head2 default
$app->plugin(Config => undef, {default => {foo => 'bar'});
Sets the default configuration hash
Default: no defaults, empty config structure
=head2 dirs
$app->plugin(Config => undef, {dirs => ['/etc/foo', '/etc/bar']});
Paths to additional directories of config files
Default: no additional directories
=head2 file
$app->plugin(Config => undef, {file => '/etc/myapp.conf'});
Path to configuration file, absolute or relative to the application root directory,
defaults to the value of the C<$moniker.conf> in the application root directory.
Default: C<configfile> command line option or C<configfile> application argument
or C</etc/$moniker/$moniker.conf> otherwise
=head2 noload
$app->plugin(Config => undef, {noload => 1});
This option disables auto loading config file
Default: C<noload> command line option or C<config_noload> application argument
or C<0> otherwise
=head2 opts, options
$app->plugin(Config => undef, {opts => {'-AutoTrue' => 0}});
$app->plugin(Config => undef, {options => {'-AutoTrue' => 0}});
Sets the L<Config::General> options directly
Default: no special options
=head2 root
$app->plugin(Config => undef, {root => '/etc/myapp'});
Sets the root directory to configuration files and directories location
Default: C<configroot> command line option or C<root> application argument
or C</etc/$moniker> otherwise
=head1 METHODS
This class inherits all methods from L<Acme::Crux::Plugin> and implements the following new ones
=head2 register
$plugin->register($app, {file => '/etc/app.conf'});
Register plugin in Acme::Crux application and merge configuration
=head1 HELPERS
All helpers of this plugin are allows get access to configuration object.
See L<Acrux::Config> for details
=head2 config, conf
Returns L<Acrux::Config> object
=head1 TO DO
See C<TODO> file
=head1 SEE ALSO
L<Acme::Crux::Plugin>, L<Acrux::Config>
=head1 AUTHOR
Serż Minus (Sergey Lepenkov) L<https://www.serzik.com> E<lt>abalama@cpan.orgE<gt>
=head1 COPYRIGHT
Copyright (C) 1998-2026 D&D Corporation
=head1 LICENSE
This program is distributed under the terms of the Artistic License Version 2.0
See the C<LICENSE> file or L<https://opensource.org/license/artistic-2-0> for details
=cut
use parent 'Acme::Crux::Plugin';
use Acrux::Config;
use Acrux::RefUtil qw/as_array_ref as_hash_ref is_true_flag/;
sub register {
my ($self, $app, $args) = @_;
# NoLoad flag: PLGARGS || OPTS || ORIG || DEFS
my $noload = is_true_flag($args->{noload}) # From plugin arguments first
|| $app->getopt("noload") # From command line options
( run in 1.600 second using v1.01-cache-2.11-cpan-d80b1682f3f )