- COMMENT PRESERVATION
- COPYRIGHT AND LICENSE
Dist::Zilla::Util::ExpandINI - Read an INI file and expand bundles as you go.
# Write a dist.ini with a bundle anywhere you like my $string = <<"EOF"; name = Foo version = 1.000 [@Some::Author] EOF path('dist.ini.meta')->spew($string); # Generate a copy with bundles inlined. use Dist::Zilla::Util::ExpandINI; Dist::Zilla::Util::ExpandINI->filter_file( 'dist.ini.meta' => 'dist.ini' ); # Hurrah, dist.ini has all the things! # Advanced Usage: my $filter = Dist::Zilla::Util::ExpandINI->new( include_does => [ 'Dist::Zilla::Role::FileGatherer', ], exclude_does => [ 'Dist::Zilla::Role::Releaser', ], ); $filter->filter_file( 'dist.ini.meta' => 'dist.ini' );
This module builds upon the previous work
:Util::BundleInfo ( Which can extract configuration from a bundle in a manner similar to how
dzil does it ) and integrates it with some very minimal
INI handling to provide a tool capable of generating bundle-free
dist.ini files from bundle-using
At present its very naïve and only keeps semantic ordering, and I've probably gotten something wrong due to cutting the complexity of Config::MVP out of the loop.
But at this stage, bundles are the only thing modified in transit.
Every thing else is practically a token-level copy-paste.
# $source , $dest Dist::Zilla::Util::ExpandINI->filter_file('source.ini','target.ini');
$source, performs expansions, and emits
$reader, performs expansions, and emits to
my $return = Dist::Zilla::Util::ExpandINI->filter_string($source);
$source, performs expansions, and returns expanded source.
Roles to include in the emitted
INI from the source
ArrayRef is empty, all
Plugins will be included.
This is the default behavior.
->new( include_does => [ 'Dist::Zilla::Role::VersionProvider', ] );
Roles to exclude from the emitted
ArrayRef is empty, no
Plugins will be excluded
This is the default behavior.
->new( exclude_does => [ 'Dist::Zilla::Role::Releaser', ] );
This attribute controls how comments are handled.
all- All comments are copied ( Default )
authordeps- Only comments that look like
none- No comments are copied.
Comments are ( since
v0.002000 ) arbitrarily supported in a very basic way. But the behavior may be surprising.
[SectionHeader] BODY [SectionHeader] BODY
Config::INI understands its content. So comment parsing is implemented as
BODY: comments: [ "A", "B", "C" ], params: [ "x=y","foo=bar" ]
[Header] ;A x = y ; Trailing Note ;B foo = bar ; Trailing Note ;Remark About Header2 [Header2]
Is re-serialized as:
[Header] ;A ;B ;Remark About Header2 x = y foo = bar [Header2]
This behavior may seem surprising, but its surprising only if you have assumptions about how
INI parsing works.
This also applies and has strange effects with bundles:
[Header] x = y ; CommentAboutBundle [@Bundle] ; More Comments About Bundle [Header2]
This expands as:
[Header] ; CommentAboutBundle x = y [BundleHeader1] arg = value [BundleHeader2] arg = value [BundleHeader3] ; More Comments About Bundle arg = value [Header2]
And also note, at this time, only whole-line comments are preserved. Suffix comments are stripped.
Kent Fredric <email@example.com>
This software is copyright (c) 2017 by Kent Fredric <firstname.lastname@example.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.