—use
5.008;
# pragma utf8
use
strict;
use
warnings;
use
utf8;
our
$VERSION
=
'1.000002'
;
# ABSTRACT: Add all Dist::Zilla plugins presently in use as prerequisites.
our
$AUTHORITY
=
'cpan:KENTNL'
;
# AUTHORITY
has
phase
=> (
is
=>
ro
=>,
isa
=> Str,
lazy
=> 1,
default
=>
sub
{
'develop'
}, );
has
relation
=> (
is
=>
ro
=>,
isa
=> Str,
lazy
=> 1,
default
=>
sub
{
'requires'
}, );
has
exclude
=> (
is
=>
ro
=>,
isa
=> ArrayRef [Str],
lazy
=> 1,
default
=>
sub
{ [] } );
has
_exclude_hash
=> (
is
=>
ro
=>,
isa
=> HashRef [Str],
lazy
=> 1,
builder
=>
'_build__exclude_hash'
);
sub
mvp_multivalue_args {
return
qw(exclude)
}
sub
_build__exclude_hash {
my
(
$self
, ) =
@_
;
return
{
map
{ (
$_
=> 1 ) } @{
$self
->exclude } };
}
sub
get_plugin_module {
my
(
undef
,
$plugin
) =
@_
;
return
if
not
ref
$plugin
;
return
Scalar::Util::blessed(
$plugin
);
}
sub
skip_prereq {
my
(
$self
,
$plugin
) =
@_
;
return
1
if
exists
$self
->_exclude_hash->{
$self
->get_plugin_module(
$plugin
) };
return
;
}
sub
get_prereq_for {
my
(
$self
,
$plugin
) =
@_
;
return
(
$self
->get_plugin_module(
$plugin
), 0 );
}
around
'dump_config'
=>
sub
{
my
(
$orig
,
$self
,
@args
) =
@_
;
my
$config
=
$self
->
$orig
(
@args
);
my
$this_config
= {
phase
=>
$self
->phase,
relation
=>
$self
->relation,
exclude
=>
$self
->exclude,
};
$config
->{
q{}
. __PACKAGE__ } =
$this_config
;
return
$config
;
};
sub
register_prereqs {
my
(
$self
) =
@_
;
my
$zilla
=
$self
->zilla;
my
$phase
=
$self
->phase;
my
$relation
=
$self
->relation;
for
my
$plugin
( @{
$self
->zilla->plugins } ) {
next
if
$self
->skip_prereq(
$plugin
);
my
(
$name
,
$version
) =
$self
->get_prereq_for(
$plugin
);
$zilla
->register_prereqs( {
phase
=>
$phase
,
type
=>
$relation
},
$name
,
$version
);
}
return
$zilla
->prereqs;
}
__PACKAGE__->meta->make_immutable;
no
Moose;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Dist::Zilla::Plugin::Prereqs::Plugins - Add all Dist::Zilla plugins presently in use as prerequisites.
=head1 VERSION
version 1.000002
=head1 SYNOPSIS
[Prereqs::Plugins]
; all plugins are now develop.requires deps
[Prereqs::Plugins]
phase = runtime ; all plugins are now runtime.requires deps
=head1 DESCRIPTION
This is mostly because I am lazy, and the lengthy list of hand-updated dependencies
on my C<@Author::> bundle started to get overwhelming, and I'd periodically miss something.
This module is kinda C<AutoPrereqs>y, but in ways that I can't imagine being plausible with
a generic C<AutoPrereqs> tool, at least, not without requiring some nasty re-implementation
of how C<dist.ini> is parsed.
=head1 METHODS
=head2 C<mvp_multivalue_args>
The list of attributes that can be specified multiple times
exclude
=head2 C<get_plugin_module>
$instance->get_plugin_module( $plugin_instance );
=head2 C<skip_prereq>
if ( $instance->skip_prereq( $plugin_instance ) ) {
}
=head2 C<get_prereq_for>
my ( $module, $version ) = $instance->get_prereq_for( $plugin_instance );
=head2 C<register_prereqs>
See L<<< C<< Dist::Zilla::Role::B<PrereqSource> >>|Dist::Zilla::Role::PrereqSource >>>
=head1 ATTRIBUTES
=head2 C<phase>
The target installation phase to inject into:
=over 4
=item * C<runtime>
=item * C<configure>
=item * C<build>
=item * C<test>
=item * C<develop>
=back
=head2 C<relation>
The type of dependency relation to create:
=over 4
=item * C<requires>
=item * C<recommends>
=item * C<suggests>
=item * C<conflicts>
Though think incredibly hard before using this last one ;)
=back
=head2 C<exclude>
Specify anything you want excluded here.
May Be specified multiple times.
[Prereqs::Plugins]
exclude = Some::Module::Thingy
exclude = Some::Other::Module::Thingy
=head1 PRIVATE ATTRIBUTES
=head2 C<_exclude_hash>
=head1 PRIVATE METHODS
=head2 C<_build__exclude_hash>
=head1 LIMITATIONS
=over 4
=item * This module will B<NOT> report C<@Bundles> as dependencies at present.
=item * This module will B<NOT> I<necessarily> include B<ALL> dependencies, but is only intended to include the majority of them.
Some plugins, such as my own C<Bootstrap::lib> don't add themselves to the C<dzil> C<< ->plugins() >> list, and as such, it will be invisible to this module.
=back
=head1 AUTHOR
Kent Fredric <kentfredric@gmail.com>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Kent Fredric <kentfredric@gmail.com>.
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