use 5.006; # our
use strict;
use warnings;
package Dist::Zilla::Plugin::MetaYAML::Minimal;
our $VERSION = '0.001001';
# ABSTRACT: Generate a reductionist YAML META file for compatibility only
our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
use Moose qw( has with around );
use Try::Tiny qw( try catch );
use Dist::Zilla::Util::ConfigDumper qw( config_dumper );
with 'Dist::Zilla::Role::FileGatherer';
has filename => (
is => 'ro',
isa => 'Str',
default => 'META.yml',
);
has version => (
is => 'ro',
isa => 'Num',
default => '1.4',
);
around dump_config => config_dumper( __PACKAGE__, qw( filename version ) );
__PACKAGE__->meta->make_immutable;
no Moose;
sub gather_files {
my ($self,) = @_;
require Dist::Zilla::File::FromCode;
require YAML::Tiny;
require CPAN::Meta::Converter;
CPAN::Meta::Converter->VERSION(2.101550); # improved downconversion
require CPAN::Meta::Validator;
CPAN::Meta::Validator->VERSION(2.101550); # improved downconversion
my $zilla = $self->zilla;
my $file = Dist::Zilla::File::FromCode->new({
name => $self->filename,
code_return_type => 'text',
code => sub {
my $distmeta = $zilla->distmeta;
my $validator = CPAN::Meta::Validator->new($distmeta);
if ( not $validator->is_valid ) {
my $msg = "Invalid META structure. Errors found:\n";
$msg .= join "\n", $validator->errors;
$self->log_fatal($msg);
}
my $converter = CPAN::Meta::Converter->new($distmeta);
my $output = $converter->convert( version => $self->version );
for my $key ( keys %{$output} ) {
delete $output->{$key} if $key =~ /\Ax_/sx;
}
my $yaml = try {
YAML::Tiny->new($output)->write_string; # text!
}
catch {
$self->log_fatal('Could not create YAML string: ' . YAML::Tiny->errstr);
};
return $yaml;
},
});
$self->add_file($file);
return;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Dist::Zilla::Plugin::MetaYAML::Minimal - Generate a reductionist YAML META file for compatibility only
=head1 VERSION
version 0.001001
=head1 SYNOPSIS
[MetaYAML::Minimal]
filename = META.yml ; default
version = 1.4 ; default
=head1 DESCRIPTION
Generally, if you're creating both C<META.json> and C<META.yml>, then you're doing so purely for compatibility reasons.
In such circumstances, using the same meta-data for both leads to a lot of cruft in C<META.yml>
This L<C<Dist::Zilla>|Dist::Zilla> extension is for such circumstances.
However, if you are I<only> shipping C<META.yml> and B<NOT> C<META.json>, then using this extension
would be harmful and cause loss of information.
Presently, this extension is a I<PROTOTYPE>, and just culls fields leading with C<x_> passed by C<Dist::Zilla>.
The final behavior may require enhancements to C<CPAN::Meta::Converter> and might be possibly superseded
by patches to C<MetaYAML> itself.
=for Pod::Coverage gather_files
=head1 AUTHOR
Kent Fredric <kentnl@cpan.org>
=head1 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.
=cut