1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
# vim: set ts=2 sts=2 sw=2 expandtab smarttab:
#
# This file is part of Dist-Zilla-Config-Slicer
#
# This software is copyright (c) 2011 by Randy Stauner.
#
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#
use strict;
use warnings;
package Dist::Zilla::Role::PluginBundle::Config::Slicer;
our $AUTHORITY = 'cpan:RWSTAUNER';
# ABSTRACT: Pass Portions of Bundle Config to Plugins
$Dist::Zilla::Role::PluginBundle::Config::Slicer::VERSION = '0.202';
use Dist::Zilla::Config::Slicer ();
use Moose::Role;
requires 'bundle_config';
# TODO: around add_bundle => sub { ($self, $bundle, $payload) = @_; $slicer->merge([$bundle, _bundle_class($bundle), $payload || {}]);
around bundle_config => sub {
my ($orig, $class, $section) = @_;
my @plugins = $orig->($class, $section);
my $slicer = Dist::Zilla::Config::Slicer->new({
config => $section->{payload},
});
$slicer->merge($_) for @plugins;
return @plugins;
};
1;
__END__
=pod
=encoding UTF-8
=for :stopwords Randy Stauner ACKNOWLEDGEMENTS
=head1 NAME
Dist::Zilla::Role::PluginBundle::Config::Slicer - Pass Portions of Bundle Config to Plugins
=head1 VERSION
version 0.202
=head1 SYNOPSIS
# in Dist::Zilla::PluginBundle::MyBundle
with (
'Dist::Zilla::Role::PluginBundle', # or PluginBundle::Easy
'Dist::Zilla::Role::PluginBundle::Config::Slicer'
);
# Config::Slicer should probably be last
# (unless you're doing something more complex)
=head1 DESCRIPTION
This role enables your L<Dist::Zilla> Plugin Bundle
to accept configuration customizations for the plugins it will load
and merge them transparently.
# dist.ini
[@MyBundle]
option = 1
Included::Plugin.attribute = overwrite value
AnotherPlug.array[0] = append value
AnotherPlug.array[1] = append another value
See L<Config::MVP::Slicer/CONFIGURATION SYNTAX> for details
on how the configurations are handled.
This role adds a method modifier to C<bundle_config>,
which is the method that the root C<PluginBundle> role requires,
and that C<PluginBundle::Easy> wraps.
After C<bundle_config> is called
the modifier will update the returned plugin configurations
with any values that were customized in the main bundle config.
Most of the work is done by L<Dist::Zilla::Config::Slicer>
(a subclass of L<Config::MVP::Slicer>).
Check out those modules if you want the same functionality
but don't want to consume this role in your bundle.
=head1 SEE ALSO
=over 4
=item *
L<Config::MVP::Slicer>
=item *
L<Dist::Zilla>
=item *
L<Dist::Zilla::Config::Slicer>
=item *
L<Dist::Zilla::Role::PluginBundle>
=item *
L<Dist::Zilla::Role::PluginBundle::Easy>
=item *
L<Dist::Zilla::PluginBundle::ConfigSlicer>
=back
=head1 AUTHOR
Randy Stauner <rwstauner@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2011 by Randy Stauner.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|