enable -ForceArray option by default for Config::General
[p5sagit/Config-Any.git] / lib / Config / Any / General.pm
index b453ca4..936bb44 100644 (file)
-package Config::Any::General;\r
-\r
-use strict;\r
-use warnings;\r
-\r
-=head1 NAME\r
-\r
-Config::Any::General - Load Config::General files\r
-\r
-=head1 DESCRIPTION\r
-\r
-Loads Config::General files. Example:\r
-\r
-    name = TestApp\r
-    <Component Controller::Foo>\r
-        foo bar\r
-    </Component>\r
-    <Model Baz>\r
-        qux xyzzy\r
-    </Model>\r
-\r
-=head1 METHODS\r
-\r
-=head2 extensions( )\r
-\r
-return an array of valid extensions (C<cnf>, C<conf>).\r
-\r
-=cut\r
-\r
-sub extensions {\r
-    return qw( cnf conf );\r
-}\r
-\r
-=head2 load( $file )\r
-\r
-Attempts to load C<$file> via Config::General.\r
-\r
-=cut\r
-\r
-sub load {\r
-    my $class = shift;\r
-    my $file  = shift;\r
-\r
-    # work around bug (?) in Config::General\r
-#   return if $class->_test_perl($file);\r
-\r
-    require Config::General;\r
-    my $configfile = Config::General->new( $file );\r
-    my $config     = { $configfile->getall };\r
-    \r
-    return $config;\r
-}\r
-\r
-# this is a bit of a hack but necessary, because Config::General is *far* too lax\r
-# about what it will load -- specifically, it seems to be quite happy to load a Perl\r
-# config file (ie, a file which is valid Perl and creates a hashref) as if it were\r
-# an Apache-style configuration file, presumably due to laziness on the part of the\r
-# developer.\r
-\r
-sub _test_perl {\r
-    my ($class, $file) = @_;\r
-    my $is_perl_src;\r
-    eval { $is_perl_src = do "$file"; };\r
-    delete $INC{$file}; # so we don't screw stuff later on\r
-    return defined $is_perl_src;\r
-}\r
-\r
-=head1 AUTHOR\r
-\r
-=over 4 \r
-\r
-=item * Brian Cassidy E<lt>bricas@cpan.orgE<gt>\r
-\r
-=back\r
-\r
-=head1 CONTRIBUTORS\r
-\r
-=over 4\r
-\r
-=item * Joel Bernstein C<< <rataxis@cpan.org> >>\r
-\r
-=back\r
-\r
-=head1 COPYRIGHT AND LICENSE\r
-\r
-Copyright 2006 by Brian Cassidy\r
-\r
-Portions Copyright 2006 Portugal Telecom\r
-\r
-This library is free software; you can redistribute it and/or modify\r
-it under the same terms as Perl itself. \r
-\r
-=head1 SEE ALSO\r
-\r
-=over 4 \r
-\r
-=item * L<Catalyst>\r
-\r
-=item * L<Config::Any>\r
-\r
-=item * L<Config::General>\r
-\r
-=back\r
-\r
-=cut\r
-\r
-1;\r
-\r
+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
+    <Component Controller::Foo>
+        foo bar
+        bar [ arrayref-value ]
+    </Component>
+    <Model Baz>
+        qux xyzzy
+    </Model>
+
+=head1 METHODS
+
+=head2 extensions( )
+
+return an array of valid extensions (C<cnf>, C<conf>).
+
+=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<Config::General> in order to work.
+
+=cut
+
+sub requires_all_of { 'Config::General' }
+
+=head1 AUTHOR
+
+Brian Cassidy E<lt>bricas@cpan.orgE<gt>
+
+=head1 CONTRIBUTORS
+
+Joel Bernstein C<< <rataxis@cpan.org> >>
+
+=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<Catalyst>
+
+=item * L<Config::Any>
+
+=item * L<Config::General>
+
+=back
+
+=cut
+
+1;
+