File Coverage

blib/lib/Dist/Zilla/Plugin/PrereqsFile.pm
Criterion Covered Total %
statement 24 24 100.0
branch n/a
condition n/a
subroutine 6 6 100.0
pod 0 2 0.0
total 30 32 93.7


line stmt bran cond sub pod time code
1             package Dist::Zilla::Plugin::PrereqsFile;
2             $Dist::Zilla::Plugin::PrereqsFile::VERSION = '0.003';
3 1     1   98812 use Moose;
  1         3  
  1         11  
4 1     1   7121 use namespace::autoclean;
  1         3  
  1         12  
5              
6             with qw/Dist::Zilla::Role::PrereqSource/;
7              
8 1     1   94 use MooseX::Types::Moose 'ArrayRef';
  1         3  
  1         13  
9 1     1   5078 use MooseX::Types::Stringlike 'Stringlike';
  1         3  
  1         9  
10              
11             my @defaults = qw/prereqs.json prereqs.yml/;
12              
13             has filenames => (
14             is => 'ro',
15             isa => ArrayRef[Stringlike],
16             default => sub {
17             return [ grep { -f } @defaults ];
18             },
19             );
20              
21             sub register_prereqs {
22 1     1 0 42053 my $self = shift;
23 1         3 for my $filename (@{ $self->filenames }) {
  1         39  
24 1         9 require Parse::CPAN::Meta;
25 1         12 my $prereqs = Parse::CPAN::Meta->load_file($filename);
26 1         501 for my $phase (keys %{ $prereqs }) {
  1         7  
27 1         3 for my $type (keys %{ $prereqs->{$phase} }) {
  1         4  
28             $self->zilla->register_prereqs(
29             { phase => $phase, type => $type },
30 1         36 %{ $prereqs->{$phase}{$type} }
  1         20  
31             );
32             }
33             }
34             }
35             }
36              
37             sub mvp_aliases {
38             return {
39 1     1 0 343 filename => 'filenames',
40             };
41             }
42              
43             __PACKAGE__->meta->make_immutable;
44              
45             1;
46              
47             #ABSTRACT: Add arbitrary metadata using a mergefile
48              
49             __END__
50              
51             =pod
52              
53             =encoding UTF-8
54              
55             =head1 NAME
56              
57             Dist::Zilla::Plugin::PrereqsFile - Add arbitrary metadata using a mergefile
58              
59             =head1 VERSION
60              
61             version 0.003
62              
63             =head1 SYNOPSIS
64              
65             =head3 dist.ini:
66              
67             [PrereqsFile]
68              
69             =head3 prereqs.yml
70              
71             runtime:
72             recommends:
73             Foo: 0.023
74             suggests:
75             Bar: 0
76              
77             =head1 DESCRIPTION
78              
79             This plugin implements prereq files. These allow you to easily add arbitrary prerequisites to your metafiles.
80              
81             =head2 Why metamerge files?
82              
83             Prereq files are somewhat similar to cpanfiles, but with an important difference. They don't involve evaluating code to produce data, data should be data.
84              
85             =head2 Names and formats
86              
87             This file reads either a JSON formatted F<prereqs.json>, and/or a YAML formatted F<prereqs.yml> (or another file if passed with the C<filename> parameter). Regardless of the format, it will parse them as L<META 2.0|CPAN::Meta::Spec> prereqs.
88              
89             =head1 AUTHOR
90              
91             Leon Timmermans <leont@cpan.org>
92              
93             =head1 COPYRIGHT AND LICENSE
94              
95             This software is copyright (c) 2017 by Leon Timmermans.
96              
97             This is free software; you can redistribute it and/or modify it under
98             the same terms as the Perl 5 programming language system itself.
99              
100             =cut