The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Dist::Zilla::Plugin::if - Load a plugin only if a condition is true

VERSION

version 0.002002

SYNOPSIS

  [if / FooLoader]
  dz_plugin            = Git::Contributors
  dz_plugin_name       = KNL/Git::Contributors
  dz_plugin_minversion = 0.010
  ?= -e $root . '.git'
  ?= -e $root . '.git/config'
  >= include_authors = 1
  >= include_releaser = 0
  >= order_by = name

DESCRIPTION

if is intended to be a similar utility to perl if.

It will execute all of condition in turn, and only when all return true, will the plugin be added to Dist::Zilla

METHODS

mvp_aliases

  • dz_plugin_arguments= can be written as >= or dz_plugin_argument=

  • conditions= can be written as ?= or condition=

mvp_multivalue_args

All of the following support multiple declaration:

  • dz_plugin_arguments

  • prereq_to

  • conditions

register_prereqs

By default, registers "dz_plugin_package" version "dz_plugin_minimumversion" as develop.requires ( as per "prereq_to" ).

check_conditions

Compiles conditions into a single sub and executes it.

  conditions = y and foo
  conditions = x blah

Compiles as

  sub { y and foo and x blah and 1 }

But with $root and $zilla in scope.

ATTRIBUTES

dz_plugin

REQUIRED

The plugin identifier.

For instance, [GatherDir / Foo] and [GatherDir] approximation would both set this field to

  dz_plugin => 'GatherDir'

dz_plugin_name

The "Name" for the plugin.

For instance, [GatherDir / Foo] would set this value as

  dz_plugin_name => "Foo"

and [GatherDir] approximation would both set this field to

  dz_plugin_name => "Foo"

In Dist::Zilla, [GatherDir] is equivalent to [GatherDir / GatherDir].

Likewise, if you do not specify dz_plugin_name, the value of dz_plugin will be used.

dz_plugin_minversion

The minimum version of dz_plugin to use.

At present, this ONLY affects prereq generation.

conditions

A mvp_multivalue_arg attribute that creates an array of conditions that must all evaluate to true for the dz_plugin to be injected.

These values are internally simply joined with and and executed in an Eval::Closure

Two variables are defined in scope for your convenience:

  • $zilla - The Dist::Zilla builder object itself

  • $root - The same as $zilla->root only more convenient.

For added convenience, this attribute has an alias of '?' ( mnemonic "Test" ), so the following are equivalent:

  [if]
  dz_plugin_name = Foo
  ?= exists $ENV{loadfoo}
  ?= !!$ENV{loadfoo}

  [if]
  dz_plugin_name = Foo
  condition = exists $ENV{loadfoo}
  condition = !!$ENV{loadfoo}

  [if]
  dz_plugin_name = Foo
  conditions = exists $ENV{loadfoo}
  conditions = !!$ENV{loadfoo}

dz_plugin_arguments

A mvp_multivalue_arg attribute that creates an array of arguments to pass on to the created plugin.

For convenience, this attribute has an alias of '>' ( mnemonic "Forward" ), so that the following example:

  [GatherDir]
  include_dotfiles = 1
  exclude_file = bad
  exclude_file = bad2

Would be written

  [if]
  dz_plugin = GatherDir
  ?= $ENV{dogatherdir}
  >= include_dotfiles = 1
  >= exclude_file = bad
  >= exclude_file = bad2

Or in crazy long form

  [if]
  dz_plugin = GatherDir
  condtion = $ENV{dogatherdir}
  dz_plugin_argument = include_dotfiles = 1
  dz_plugin_argument = exclude_file = bad
  dz_plugin_argument = exclude_file = bad2

prereq_to

This determines where dependencies get injected.

Default is:

  develop.requires

And a special value

  none

Prevents dependency injection.

This attribute may be specified multiple times.

dz_plugin_package

This is an implementation detail which returns the expanded name of dz_plugin

You could probably find some evil use for this, but I doubt it.

AUTHOR

Kent Fredric <kentnl@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2017 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.