package Module::Provision::Config;
use namespace::autoclean;
use Class::Usul::Constants qw( NUL TRUE );
use Class::Usul::Functions qw( fullname loginid logname untaint_cmdline
untaint_identifier );
use File::DataClass::Types qw( ArrayRef HashRef NonEmptySimpleStr
Path SimpleStr Undef );
use Moo;
extends qw(Class::Usul::Config::Programs);
# Object attributes (public)
has 'author' => is => 'lazy', isa => NonEmptySimpleStr,
builder => sub {
my $author = untaint_cmdline $ENV{AUTHOR} || fullname || logname;
$author =~ s{ [\'] }{\'}gmx; return $author };
has 'author_email' => is => 'lazy', isa => NonEmptySimpleStr,
builder => sub {
my $email = untaint_cmdline $ENV{EMAIL} || 'dave@example.com';
$email =~ s{ [\'] }{\'}gmx; return $email };
has 'author_id' => is => 'lazy', isa => NonEmptySimpleStr,
builder => sub { loginid };
has 'base' => is => 'lazy', isa => Path, coerce => TRUE,
builder => sub { $_[ 0 ]->my_home };
has 'builder' => is => 'lazy', isa => NonEmptySimpleStr,
default => 'MB';
has 'coverage_server' => is => 'ro', isa => NonEmptySimpleStr,
default => 'http://localhost:5000/coverage';
has 'default_branches' => is => 'lazy', isa => HashRef,
builder => sub { { git => 'master', svn => 'trunk' } };
has 'delete_files_uri' => is => 'lazy', isa => NonEmptySimpleStr,
builder => sub { untaint_cmdline $ENV{CPAN_DELETE_FILES_URI}
|| 'https://pause.perl.org/pause/authenquery' };
has 'editor' => is => 'lazy', isa => NonEmptySimpleStr,
builder => sub { untaint_identifier $ENV{EDITOR} || 'emacs' };
has 'home_page' => is => 'lazy', isa => NonEmptySimpleStr,
default => 'http://example.com';
has 'hooks' => is => 'lazy', isa => ArrayRef[NonEmptySimpleStr],
builder => sub { [ 'commit-msg', 'pre-commit' ] };
has 'license' => is => 'lazy', isa => NonEmptySimpleStr,
default => 'perl';
has 'localdir' => is => 'ro', isa => NonEmptySimpleStr,
default => 'local';
has 'min_perl_ver' => is => 'lazy', isa => NonEmptySimpleStr,
default => '5.010001';
has 'module_abstract' => is => 'lazy', isa => NonEmptySimpleStr,
default => 'One-line description of the modules purpose';
has 'pub_repo_prefix' => is => 'ro', isa => SimpleStr, default => 'p5-';
has 'remote_test_id' => is => 'ro', isa => NonEmptySimpleStr,
default => 'test@testhost';
has 'remote_script' => is => 'ro', isa => NonEmptySimpleStr,
default => 'install_perl_module';
has 'repository' => is => 'lazy', isa => NonEmptySimpleStr,
default => 'repository';
has 'seed_file' => is => 'lazy', isa => Path | Undef, coerce => TRUE,
builder => sub { [ qw( ~ .ssh pause.key ) ] };
has 'signing_key' => is => 'lazy', isa => SimpleStr,
default => NUL;
has 'tag_message' => is => 'lazy', isa => NonEmptySimpleStr,
default => 'Releasing';
has 'template_index' => is => 'lazy', isa => NonEmptySimpleStr,
default => 'index.json';
has 'test_env_vars' => is => 'lazy', isa => ArrayRef,
documentation => 'Set these environment vars to true when testing',
builder => sub {
[ qw( AUTHOR_TESTING TEST_MEMORY TEST_SPELLING ) ] };
has 'vcs' => is => 'lazy', isa => NonEmptySimpleStr,
default => 'git';
1;
__END__
=pod
=encoding utf-8
=head1 Name
Module::Provision::Config - Attributes set from the config file
=head1 Synopsis
use Moo;
extends 'Class::Usul::Programs';
has '+config_class' => default => sub { 'Module::Provision::Config' };
=head1 Description
Defines attributes which can be set from the config file
=head1 Configuration and Environment
Defines the following attributes;
=over 3
=item C<author>
A non empty simple string which defaults to the value of the environment
variable C<AUTHOR>. If the environment variable is unset
defaults to C<fullname> and then C<logname>
=item C<author_email>
A non empty simple string which defaults to the value of the environment
variable C<EMAIL>. If the environment variable is unset
defaults to C<dave@example.com>
=item C<author_id>
A non empty simple string which defaults to the author's login identity
=item C<base>
A path object which defaults to the authors home directory. The default
directory in which to create new distributions
=item C<builder>
A non empty simple string default to C<MB>. Selects the build system to
use when creating new distributions
=item C<coverage_server>
The HTTP address of the coverage server. Used by the badge markup feature
=item C<default_branches>
A hash reference. The default branch names for the C<git> and C<svn> VCSs
which are C<master> and C<trunk> respectively
=item C<delete_files_uri>
A non empty simple string which defaults to the value of the environment
variable C<CPAN_DELETE_FILES_URI>. If the environment variable is unset
defaults to C<https://pause.perl.org/pause/authenquery>. The URI of the
PAUSE service
=item C<editor>
A non empty simple string which defaults to the value of the environment
variable C<EDITOR>. If the environment variable is unset defaults to
C<emacs>. Which editor to invoke which C<edit_project> is called
=item C<home_page>
A non empty simple string which default to C<http://example.com>. Override
this in the configuration file to set the meta data used when creating a
distribution
=item C<hooks>
An array reference of non empty simple strings which defaults to F<commit-msg>
and F<pre-commit>. This list of Git hooks is operated on by the C<add_hooks>
method
=item C<license>
A non empty simple string which defaults to C<perl>. The default license for
new distributions
=item C<localdir>
A non empty simple string which defaults to F<local>. The directory into which
L<local::lib> should be installed
=item C<min_perl_ver>
Non empty simple string that is used as the default in the meta data of a
newly minted distribution
=item C<module_abstract>
A non empty simple string which is used as the default abstract for newly
minted modules
=item C<pub_repo_prefix>
A simple string which default to C<p5->. Prepended to the lower cased
distribution name it forms the name of the public repository
=item C<remote_test_id>
A non empty simple string that defaults to C<test@testhost>. The identity
and host used to perform test installations
=item C<remote_script>
A non empty simple string that defaults to C<install_perl_module>. The command
to execute on the test installation server
=item C<repository>
A non empty simple string which defaults to C<repository>. Name of the
L</appbase> subdirectory expected to contain a Git repository
=item C<seed_file>
File object reference or undefined. This optionally points to the file
containing the key to decrypt the author's PAUSE account password which
is stored in the F<~/.pause> file
=item C<signing_key>
Simple string that defaults to C<NUL>. If non null then this string is used
as a fingerprint to find the author distribution signing key
=item C<tag_message>
Non empty simple string defaults to C<Releasing>. This is the default message
to apply to the commit which creates a tagged release
=item C<template_index>
Name of the file containing the index of templates. Defaults to F<index.json>
=item C<test_env_vars>
Array reference. Set these environment vars to true when testing. Defaults
to; C<AUTHOR_TESTING TEST_MEMORY>, and C<TEST_SPELLING>
=item C<vcs>
A non empty simple string that defaults to C<git>. The default version control
system
=back
=head1 Subroutines/Methods
None
=head1 Diagnostics
None
=head1 Dependencies
=over 3
=item L<Class::Usul>
=item L<File::DataClass>
=item L<User::pwent>
=back
=head1 Incompatibilities
There are no known incompatibilities in this module
=head1 Bugs and Limitations
There are no known bugs in this module.
Please report problems to the address below.
Patches are welcome
=head1 Acknowledgements
Larry Wall - For the Perl programming language
=head1 Author
Peter Flanigan, C<< <pjfl@cpan.org> >>
=head1 License and Copyright
Copyright (c) 2017 Peter Flanigan. All rights reserved
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself. See L<perlartistic>
This program is distributed in the hope that it will be useful,
but WITHOUT WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
=cut
# Local Variables:
# mode: perl
# tab-width: 3
# End: