use 5.008;
use strict;
use warnings;
package Pod::Weaver::Section::Availability;
# ABSTRACT: Add an AVAILABILITY pod section
our $VERSION = '1.20'; # VERSION
use Moose;
with 'Pod::Weaver::Role::Section';
use namespace::autoclean;
use Moose::Autobox;
# add a set of attributes to hold the repo information
has zilla => (
is => 'rw',
isa => 'Dist::Zilla',
handles => ['distmeta'],
);
has [qw(homepage_url cpan_url repo_type repo_url name)] => (
is => 'rw',
isa => 'Str',
lazy_build => 1
);
has repo_web => (
is => 'rw',
lazy_build => 1
);
has is_github => (
is => 'rw',
isa => 'Bool',
lazy_build => 1
);
sub weave_section {
my ($self, $document, $input) = @_;
$self->zilla($input->{zilla});
my @pod = ($self->_homepage_pod, $self->_cpan_pod);
# Non-github repos may not have a repo web URL
if ($self->repo_web) {
push @pod, $self->_development_pod;
}
$document->children->push(
Pod::Elemental::Element::Nested->new(
{ command => 'head1',
content => 'AVAILABILITY',
children => \@pod,
}
),
);
}
sub _build_name {
my $name = shift->zilla->name;
$name =~ s/-/::/g;
return $name;
}
sub _build_homepage_url {
my $self = shift;
$self->distmeta->{resources}{homepage}
|| sprintf 'https://metacpan.org/module/%s/', $self->name;
}
sub _build_cpan_url {
sprintf 'https://metacpan.org/module/%s/', shift->name;
}
# if we don't know we default to git...
sub _build_repo_type {
shift->distmeta->{resources}{repository}{type} || 'git';
}
sub _build_repo_url {
(shift->_build_repo_data)[0];
}
sub _build_repo_web {
(shift->_build_repo_data)[1];
}
sub _build_is_github {
my $self = shift;
# we do this by looking at the URL for githubbyness
my $repourl = $self->distmeta->{resources}{repository}{url}
or return;
$repourl =~ m|/github.com/|;
}
sub _build_repo_data {
my $self = shift;
my $repourl = $self->distmeta->{resources}{repository}{url};
my $repoweb;
if ($self->is_github) {
# strip the access method off - we can then add it as needed
my $nomethod = $repourl;
$nomethod =~ s{^(http|git|git\@github\.com):/*}{}i;
$nomethod =~ s{\.git$}{}i;
$repourl = "git://$nomethod.git";
$repoweb = "http://$nomethod";
}
return ($repourl, $repoweb);
}
sub _homepage_pod {
my $self = shift;
# we suppress this if the CPAN URL is the homepage URL
return if $self->cpan_url eq $self->homepage_url;
# otherwise return some boilerplate
Pod::Elemental::Element::Pod5::Ordinary->new({
content => sprintf 'The project homepage is L<%s>.', $self->homepage_url
});
}
sub _cpan_pod {
my $self = shift;
my $text = sprintf
"%s\n%s\n%s L<%s>.",
'The latest version of this module is available from the Comprehensive Perl',
'Archive Network (CPAN). Visit L to find a CPAN',
'site near you, or see',
$self->cpan_url;
Pod::Elemental::Element::Pod5::Ordinary->new({ content => $text });
}
sub _development_pod {
my $self = shift;
my $text;
if ($self->is_github) {
$text = sprintf <<'END_TEXT', $self->repo_web, $self->repo_url;
The development version lives at L<%s>
and may be cloned from L<%s>.
Instead of sending patches, please fork this project using the standard
git and github infrastructure.
END_TEXT
}
elsif ($self->repo_type and $self->repo_web) {
$text =
sprintf "The development version lives in a %s repository at L<%s>\n",
$self->repo_type, $self->repo_web;
}
Pod::Elemental::Element::Pod5::Ordinary->new({ content => $text }) if $text;
return;
}
1;
__END__
=pod
=encoding utf-8
=head1 NAME
Pod::Weaver::Section::Availability - Add an AVAILABILITY pod section
=head1 VERSION
version 1.20
=head1 SYNOPSIS
In C:
[Availability]
=head1 OVERVIEW
This section plugin will produce a hunk of Pod that refers the user to the
distribution's homepage and development versions.
You need to use L and
L in your C file, because
this plugin relies on information those other plugins generate.
=head1 METHODS
=head2 weave_section
Adds the C section.
=for test_synopsis 1;
__END__
=head1 AVAILABILITY
The project homepage is L.
The latest version of this module is available from the Comprehensive Perl
Archive Network (CPAN). Visit L to find a CPAN
site near you, or see L.
=head1 SOURCE
The development version is on github at L
and may be cloned from L
=head1 BUGS AND LIMITATIONS
No bugs have been reported.
Please report any bugs or feature requests through the web interface at
L.
=head1 AUTHORS
=over 4
=item *
Marcel Gruenauer
=item *
Nigel Metheringham
=item *
Mark Gardner
=item *
Mike Doherty
=back
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by Mike Doherty.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut