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 : When PROJECTROOT/<distname>-<version> does not exist, don't perform any bootstrapping

  • true (default) : When PROJECTROOT/<distname>-<version> does not exist, bootstrap to PROJECTROOT/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 recent mtime

  • 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.