X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FConfig-Any.git;a=blobdiff_plain;f=lib%2FConfig%2FAny%2FGeneral.pm;h=936bb4498a8fdc8661bc968822112dd3b36bee8b;hp=195148846ac6af12b9edf947f9ad2cbeb6f77d4e;hb=7adf5673d07031b77f7edd3403491512b9a48cb3;hpb=59a8045203653a6f6cbccc3c24eb3884fba40ddc diff --git a/lib/Config/Any/General.pm b/lib/Config/Any/General.pm index 1951488..936bb44 100644 --- a/lib/Config/Any/General.pm +++ b/lib/Config/Any/General.pm @@ -1,108 +1,116 @@ -package Config::Any::General; - -use strict; -use warnings; - -=head1 NAME - -Config::Any::General - Load Config::General files - -=head1 DESCRIPTION - -Loads Config::General files. Example: - - name = TestApp - - foo bar - - - qux xyzzy - - -=head1 METHODS - -=head2 extensions( ) - -return an array of valid extensions (C, C). - -=cut - -sub extensions { - return qw( cnf conf ); -} - -=head2 load( $file ) - -Attempts to load C<$file> via Config::General. - -=cut - -sub load { - my $class = shift; - my $file = shift; - - # work around bug (?) in Config::General - return if $class->_test_perl($file); - - require Config::General; - my $configfile = Config::General->new( $file ); - my $config = { $configfile->getall }; - - return $config; -} - -# this is a bit of a hack but necessary, because Config::General is *far* too lax -# about what it will load -- specifically, it seems to be quite happy to load a Perl -# config file (ie, a file which is valid Perl and creates a hashref) as if it were -# an Apache-style configuration file, presumably due to laziness on the part of the -# developer. - -sub _test_perl { - my ($class, $file) = @_; - my $is_perl_src; - eval { $is_perl_src = do "$file"; }; - delete $INC{$file}; # so we don't screw stuff later on - return defined $is_perl_src; -} - -=head1 AUTHOR - -=over 4 - -=item * Brian Cassidy Ebricas@cpan.orgE - -=back - -=head1 CONTRIBUTORS - -=over 4 - -=item * Joel Bernstein C<< >> - -=back - -=head1 COPYRIGHT AND LICENSE - -Copyright 2006 by Brian Cassidy - -Portions Copyright 2006 Portugal Telecom - -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::General; + +use strict; +use warnings; + +use base 'Config::Any::Base'; + +=head1 NAME + +Config::Any::General - Load Config::General files + +=head1 DESCRIPTION + +Loads Config::General files. Example: + + name = TestApp + + foo bar + bar [ arrayref-value ] + + + qux xyzzy + + +=head1 METHODS + +=head2 extensions( ) + +return an array of valid extensions (C, C). + +=cut + +sub extensions { + return qw( cnf conf ); +} + +=head2 load( $file ) + +Attempts to load C<$file> via Config::General. + +=cut + +sub load { + my $class = shift; + my $file = shift; + my $args = shift || {}; + + # work around bug (?) in Config::General + # return if $class->_test_perl($file); + + $args->{ -ConfigFile } = $file; + + $args->{ -ForceArray } = 1 unless exists $args->{ -ForceArray }; + + require Config::General; + my $configfile = Config::General->new( %$args ); + my $config = { $configfile->getall }; + + return $config; +} + +# this is a bit of a hack but necessary, because Config::General is *far* too lax +# about what it will load -- specifically, it seems to be quite happy to load a Perl +# config file (ie, a file which is valid Perl and creates a hashref) as if it were +# an Apache-style configuration file, presumably due to laziness on the part of the +# developer. + +sub _test_perl { + my ( $class, $file ) = @_; + my $is_perl_src; + eval { $is_perl_src = do "$file"; }; + delete $INC{ $file }; # so we don't screw stuff later on + return defined $is_perl_src; +} + +=head2 requires_all_of( ) + +Specifies that this module requires L in order to work. + +=cut + +sub requires_all_of { 'Config::General' } + +=head1 AUTHOR + +Brian Cassidy Ebricas@cpan.orgE + +=head1 CONTRIBUTORS + +Joel Bernstein C<< >> + +=head1 COPYRIGHT AND LICENSE + +Copyright 2006-2010 by Brian Cassidy + +Portions Copyright 2006 Portugal Telecom + +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; +