04 Mar 2017 05:52:13 UTC
- Distribution: Dist-Zilla-Util-ExpandINI
- Module version: 0.003003
- Source (raw)
- Browse (raw)
- How to Contribute
- Repository (git clone)
- Issues (0)
- Testers (952 / 0 / 0)
- KwaliteeBus factor: 0
- 79.65% Coverage
- License: perl_5
- Perl: v5.6.0
- Activity24 month
- Download (31.62KB)
- MetaCPAN Explorer
- Subscribe to distribution
- This version
- Latest version
Why not adopt me?This distribution is up for adoption! If you're interested then please contact the PAUSE module admins via email.
- 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
dzildoes it ) and integrates it with some very minimal
INIhandling to provide a tool capable of generating bundle-free
dist.inifiles 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
INIfrom the source
ArrayRefis empty, all
Plugins will be included.
This is the default behavior.
->new( include_does => [ 'Dist::Zilla::Role::VersionProvider', ] );
Roles to exclude from the emitted
ArrayRefis 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::INIunderstands 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
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.
Module Install Instructions
To install Dist::Zilla::Util::ExpandINI, copy and paste the appropriate command in to your terminal.
perl -MCPAN -e shell install Dist::Zilla::Util::ExpandINI
For more information on module installation, please visit the detailed CPAN module installation guide.