X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FConfig-Any.git;a=blobdiff_plain;f=lib%2FConfig%2FAny%2FINI.pm;h=bc1951b66a358533031c30716600292d801e1728;hp=3b92c5bf84e7f89d5c32846a991e8a41df82bde3;hb=f9f3d682a0332cec1207764dcada85a7ff7750f0;hpb=41f47406cfe9dae0851eec4976ffcb7f4c368f22 diff --git a/lib/Config/Any/INI.pm b/lib/Config/Any/INI.pm index 3b92c5b..bc1951b 100644 --- a/lib/Config/Any/INI.pm +++ b/lib/Config/Any/INI.pm @@ -1,117 +1,125 @@ -package Config::Any::INI; - -use strict; -use warnings; - -our $MAP_SECTION_SPACE_TO_NESTED_KEY = 1; - -=head1 NAME - -Config::Any::INI - Load INI config files - -=head1 DESCRIPTION - -Loads INI files. Example: - - name=TestApp - - [Controller::Foo] - foo=bar - - [Model::Baz] - qux=xyzzy - -=head1 METHODS - -=head2 extensions( ) - -return an array of valid extensions (C). - -=cut - -sub extensions { - return qw( ini ); -} - -=head2 load( $file ) - -Attempts to load C<$file> as an INI file. - -=cut - -sub load { - my $class = shift; - my $file = shift; - - require Config::Tiny; - my $config = Config::Tiny->read( $file ); - - my $main = delete $config->{ _ }; - my $out; - $out->{$_} = $main->{$_} for keys %$main; - - for my $k (keys %$config) { - my @keys = split /\s+/, $k if $MAP_SECTION_SPACE_TO_NESTED_KEY; - my $ref = $config->{$k}; - - if (@keys > 1) { - my ($a, $b) = @keys[0,1]; - $out->{$a}->{$b} = $ref; - } else { - $out->{$k} = $ref; - } - } - return $out; -} - -=head1 PACKAGE VARIABLES - -=over 4 - -=item $MAP_SECTION_SPACE_TO_NESTED_KEY (boolean) - -This variable controls whether spaces in INI section headings will be expanded into nested hash keys. -e.g. it controls whether [Full Power] maps to $config->{'Full Power'} or $config->{'Full'}->{'Power'} - -By default it is set to 1 (i.e. true). - -Set it to 0 to preserve literal spaces in section headings: - - use Config::Any; - use Config::Any::INI; - $Config::Any::INI::MAP_SECTION_SPACE_TO_NESTED_KEY = 0; - -=back - -=head1 AUTHOR - -=over 4 - -=item * Brian Cassidy Ebricas@cpan.orgE - -=item * Joel Bernstein Erataxis@cpan.orgE - -=back - -=head1 COPYRIGHT AND LICENSE - -Copyright 2006 by Brian Cassidy, portions copyright 2006, 2007 by Joel Bernstein - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. - -=head1 SEE ALSO - -=over 4 - -=item * L - -=item * L - -=item * L - -=back - -=cut - -1; +package Config::Any::INI; + +use strict; +use warnings; + +use base 'Config::Any::Base'; + +our $MAP_SECTION_SPACE_TO_NESTED_KEY = 1; + +=head1 NAME + +Config::Any::INI - Load INI config files + +=head1 DESCRIPTION + +Loads INI files. Example: + + name=TestApp + + [Controller::Foo] + foo=bar + + [Model::Baz] + qux=xyzzy + +=head1 METHODS + +=head2 extensions( ) + +return an array of valid extensions (C). + +=cut + +sub extensions { + return qw( ini ); +} + +=head2 load( $file ) + +Attempts to load C<$file> as an INI file. + +=cut + +sub load { + my $class = shift; + my $file = shift; + + require Config::Tiny; + my $config = Config::Tiny->read( $file ); + + die $Config::Tiny::errstr if not defined $config; + + my $out = delete $config->{ _ } || {}; + + for my $k ( keys %$config ) { + my @keys = split /\s+/, $k; + my $ref = $config->{ $k }; + + if ( $MAP_SECTION_SPACE_TO_NESTED_KEY && @keys > 1 ) { + my ( $a, $b ) = @keys[ 0, 1 ]; + $out->{ $a }->{ $b } = $ref; + } + else { + $out->{ $k } = { %{ $out->{ $k } || {} }, %$ref }; + } + } + + return $out; +} + +=head2 requires_all_of( ) + +Specifies that this module requires L in order to work. + +=cut + +sub requires_all_of { 'Config::Tiny' } + +=head1 PACKAGE VARIABLES + +=over 4 + +=item $MAP_SECTION_SPACE_TO_NESTED_KEY (boolean) + +This variable controls whether spaces in INI section headings will be expanded into nested hash keys. +e.g. it controls whether [Full Power] maps to $config->{'Full Power'} or $config->{'Full'}->{'Power'} + +By default it is set to 1 (i.e. true). + +Set it to 0 to preserve literal spaces in section headings: + + use Config::Any; + use Config::Any::INI; + $Config::Any::INI::MAP_SECTION_SPACE_TO_NESTED_KEY = 0; + +=back + +=head1 AUTHORS + +Brian Cassidy Ebricas@cpan.orgE + +Joel Bernstein Erataxis@cpan.orgE + +=head1 COPYRIGHT AND LICENSE + +Copyright 2006-2015 by Brian Cassidy, portions copyright 2006, 2007 by Joel Bernstein + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 SEE ALSO + +=over 4 + +=item * L + +=item * L + +=item * L + +=back + +=cut + +1;