Skip to content

Commit

Permalink
cpanfile plugin!
Browse files Browse the repository at this point in the history
  • Loading branch information
rjbs committed Apr 1, 2012
1 parent 8f9d6ea commit 2ae2e7a
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 0 deletions.
1 change: 1 addition & 0 deletions Changes
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Revision history for {{$dist->name}}

{{$NEXT}}
added the CPANFile plugin to create "cpanfile" prereq format

4.300013 2012-03-31 15:55:47 Europe/Paris
dzil test has a new option, --all, which is the equivalent of
Expand Down
2 changes: 2 additions & 0 deletions dist.ini
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@ Config::MVP::Reader::INI = 2 ; ensure there's a basic config format
remove = Config ; why isn't this indexed?? -- rjbs, 2011-02-11
remove = Dist::Zilla::Tester::_Role ; mistakenly added by autoprereq
remove = Some::Package::That::Does::Not::Exist::Due::To::A::Typo

[CPANFile]
77 changes: 77 additions & 0 deletions lib/Dist/Zilla/Plugin/CPANFile.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package Dist::Zilla::Plugin::CPANFile;
# ABSTRACT: produce a cpanfile prereqs file
use Moose;
use Moose::Autobox;
with 'Dist::Zilla::Role::FileGatherer';

use namespace::autoclean;

use Dist::Zilla::File::FromCode;

=head1 DESCRIPTION
This plugin will add a F<cpanfile> file to the distribution.
=attr filename
If given, parameter allows you to specify an alternate name for the generated
file. It defaults, of course, to F<cpanfile>.
=cut

has filename => (
is => 'ro',
isa => 'Str',
default => 'cpanfile',
);

sub _hunkify_hunky_hunk_hunks {
my ($self, $indent, $type, $req) = @_;

my $str = '';
for my $module (sort $req->required_modules) {
my $vstr = $req->requirements_for_module($module);
$str .= qq{$type "$module" => "$vstr";\n};
}
$str =~ s/^/' ' x $indent/egm;
return $str;
}

sub gather_files {
my ($self, $arg) = @_;

my $zilla = $self->zilla;

my $file = Dist::Zilla::File::FromCode->new({
name => $self->filename,
code => sub {
my $prereqs = $zilla->prereqs;

my @types = qw(requires recommends suggests conflicts);
my @phases = qw(runtime build test configure develop);

my $str = '';
for my $phase (@phases) {
for my $type (@types) {
my $req = $prereqs->requirements_for($phase, $type);
next unless $req->required_modules;
$str .= qq[\non '$phase' => sub {\n] unless $phase eq 'runtime';
$str .= $self->_hunkify_hunky_hunk_hunks(
($phase eq 'runtime' ? 0 : 1),
$type,
$req,
);
$str .= qq[};\n] unless $phase eq 'runtime';
}
}

return $str;
},
});

$self->add_file($file);
return;
}

__PACKAGE__->meta->make_immutable;
1;

0 comments on commit 2ae2e7a

Please sign in to comment.