use strict;
use warnings;
+use base 'Config::Any::Base';
+
=head1 NAME
Config::Any::XML - Load XML config files
sub load {
my $class = shift;
my $file = shift;
+ my $args = shift || {};
require XML::Simple;
- XML::Simple->import;
- my $config = XMLin(
- $file,
+ my $config = XML::Simple::XMLin(
+ $file,
ForceArray => [ qw( component model view controller ) ],
+ %$args
);
- return $class->_coerce($config);
+ return $class->_coerce( $config );
}
sub _coerce {
+
# coerce the XML-parsed config into the correct format
- my $class = shift;
+ my $class = shift;
my $config = shift;
my $out;
- for my $k (keys %$config) {
- my $ref = $config->{$k};
- my $name = ref $ref ? delete $ref->{name} : undef;
- if (defined $name) {
- $out->{$k}->{$name} = $ref;
- } else {
- $out->{$k} = $ref;
+ for my $k ( keys %$config ) {
+ my $ref = $config->{ $k };
+ my $name = ref $ref ? delete $ref->{ name } : undef;
+ if ( defined $name ) {
+ $out->{ $k }->{ $name } = $ref;
+ }
+ else {
+ $out->{ $k } = $ref;
}
}
$out;
}
-=head1 AUTHOR
+=head2 requires_all_of( )
-=over 4
+Specifies that this module requires L<XML::Simple> in order to work.
-=item * Brian Cassidy E<lt>bricas@cpan.orgE<gt>
+=cut
-=item * Joel Bernstein E<lt>rataxis@cpan.orgE<gt>
+sub requires_all_of { 'XML::Simple' }
-=back
+=head1 CAVEATS
+
+=head2 Strict Mode
+
+If, by some chance, L<XML::Simple> has already been loaded with the strict
+flag turned on, then you will likely get errors as warnings will become
+fatal exceptions and certain arguments to XMLin() will no longer be optional.
+
+See L<XML::Simple's strict mode documentation|XML::Simple/STRICT_MODE> for
+more information.
+
+=head1 AUTHORS
+
+Brian Cassidy E<lt>bricas@cpan.orgE<gt>
+
+Joel Bernstein E<lt>rataxis@cpan.orgE<gt>
=head1 COPYRIGHT AND LICENSE
-Copyright 2006 by Brian Cassidy
+Copyright 2007 by Brian Cassidy
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.