Why not adopt me?
NAME
Dist::Zilla::Role::Bootstrap - Shared logic for bootstrap things.
VERSION
version 1.000001
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
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 <kentfredric@gmail.com>
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.