Why not adopt me?
NAME
Dist::Zilla::Role::Bootstrap - Shared logic for bootstrap things.
VERSION
version 1.001000
SYNOPSIS
For consuming plugins:
use Moose;
with 'Dist::Zilla::Role::Bootstrap';
sub bootstrap {
my $bootstrap_root = $_[0]->_bootstrap_root;
# Do the actual bootstrap work here
$_[0]->_add_inc('./some/path/here');
}
For users of plugins:
[Some::Plugin::Name]
try_built = 0 ; # use / as the root to bootstrap
try_built = 1 ; # try to use /Dist-Name-.*/ instead of /
fallback = 0 ; # don't bootstrap at all if /Dist-Name-.*/ matches != 1 things
fallback = 1 ; # fallback to / if /Dist-Name-.*/ matches != 1 things
DESCRIPTION
This module is a role that aims to be consumed by plugins that want to perform some very early bootstrap operation that may affect the loading environment of successive plugins, especially with regards to plugins that may wish to build with themselves, either by consuming the source tree itself, or by consuming a previous built iteration.
Implementation is quite simple:
- 1.
with
this role in your plugin -
with 'Dist::Zilla::Role::Bootstrap'
- 2. Implement the
bootstrap
sub. -
sub bootstrap { my ( $self ) = @_; }
- 3. Optional: Fetch the discovered
bootstap
root via: -
$self->_bootstap_root
- 4. Optional: Load some path into
@INC
via: -
$self->_add_inc($path)
REQUIRED METHODS
bootstrap
Any user specified bootstrap
method will be invoked during plugin_from_config
.
This is AFTER ->new
, AFTER ->BUILD
, and AFTER dzil
's internal plugin_from_config
steps.
This occurs within the register_component
phase of the plug-in loading and configuration.
This also occurs BEFORE Dist::Zilla
attaches the plug-in into the plug-in stash.
ATTRIBUTES
distname
The name of the distribution.
This value is vivified by asking zilla->name
.
Usually this value is populated by dist.ini
in the property name
However, occasionally, this value is discovered by a plugin
.
In such a case, that plugin cannot be bootstrapped, because that plugin MUST be loaded prior to bootstrap.
try_built
This attribute controls how the consuming plugin
behaves.
false (default) : bootstrapping is only done to
PROJECTROOT/lib
true : bootstrap attempts to try
PROJECTROOT/<distname>-<version>/lib
fallback
This attribute is for use in conjunction with try_built
false
: WhenPROJECTROOT/<distname>-<version>
does not exist, don't perform any bootstrappingtrue
(default) : WhenPROJECTROOT/<distname>-<version>
does not exist, bootstrap toPROJECTROOT/lib
try_built_method
This attribute controls how try_built
behaves when multiple directories exist that match PROJECTROOT/<distname>-.*
Two valid options at this time:
mtime
(default) : Pick the directory with the most recentmtime
parseversion
: Attempt to parse versions on all candidate directories and use the one with the largest version.
Prior to 0.2.0
this property did not exist, and default behavior was to assume 0 Candidates
and 2 or more Candidates
were the same problem.
PRIVATE ATTRIBUTES
_cwd
_bootstrap_root
Internal: This is the real legwork, and resolves the base directory using the bootstrap resolution protocol.
It should always return a project root of some kind, whether it be a source tree, or built source tree.
It can also return undef
if discovery concludes that no bootstrap can or should be performed.
PRIVATE METHODS
_pick_latest_mtime
"Latest" mtime
candidate selector
my $directory = $self->_pick_latest_mtime(@directory_objects)
_get_candidate_version
Attempt to resolve a version from a directory name
my $version = $self->_get_candidate_version($directory_object)
NOTE: At this time, the presence of -TRIAL
is simply stripped and ignored
_pick_latest_parseversion
"Latest" version
candidate selector
my $directory = $self->_pick_latest_parseversion(@directory_objects)
_pick_candidate
Pick a directory from a list of candidates using the method described by try_built_method
my $directory = $self->_pick_candidate( @directory_objects );
_add_inc
Internal: Used to perform the final step of injecting library paths into @INC
$self->_add_inc("$libraryPath");
AUTHOR
Kent Fredric <kentnl@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2015 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.