X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FConfig%2FAny%2FXML.pm;h=740c7112c6c79aa8da2d7fcac3ef2a4425f83324;hb=257737f9fe6767883962406974f9c53a1d2dbb1c;hp=a37a2f2513df84352887ae8c947e2b45cfaba9f1;hpb=c80a0905834ed09d487b84d7a00a3e92e44bbb62;p=p5sagit%2FConfig-Any.git
diff --git a/lib/Config/Any/XML.pm b/lib/Config/Any/XML.pm
index a37a2f2..740c711 100644
--- a/lib/Config/Any/XML.pm
+++ b/lib/Config/Any/XML.pm
@@ -1,82 +1,124 @@
-package Config::Any::XML;
-
-use strict;
-use warnings;
-
-=head1 NAME
-
-Config::Any::XML - Load XML config files
-
-=head1 DESCRIPTION
-
-Loads XML files. Example:
-
-
- TestApp
-
- bar
-
-
- xyzzy
-
-
-
-=head1 METHODS
-
-=head2 extensions( )
-
-return an array of valid extensions (C).
-
-=cut
-
-sub extensions {
- return qw( xml );
-}
-
-=head2 load( $file )
-
-Attempts to load C<$file> as an XML file.
-
-=cut
-
-sub load {
- my $class = shift;
- my $file = shift;
-
- require XML::Simple;
- XML::Simple->import;
- my $config = XMLin( $file, ForceArray => [ qw( component model view controller ) ] );
-
- return $config;
-}
-
-=head1 AUTHOR
-
-=over 4
-
-=item * Brian Cassidy Ebricas@cpan.orgE
-
-=back
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2006 by Brian Cassidy
-
-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;
\ No newline at end of file
+package Config::Any::XML;
+
+use strict;
+use warnings;
+
+use base 'Config::Any::Base';
+
+=head1 NAME
+
+Config::Any::XML - Load XML config files
+
+=head1 DESCRIPTION
+
+Loads XML files. Example:
+
+
+ TestApp
+
+ bar
+
+
+ xyzzy
+
+
+
+=head1 METHODS
+
+=head2 extensions( )
+
+return an array of valid extensions (C).
+
+=cut
+
+sub extensions {
+ return qw( xml );
+}
+
+=head2 load( $file )
+
+Attempts to load C<$file> as an XML file.
+
+=cut
+
+sub load {
+ my $class = shift;
+ my $file = shift;
+ my $args = shift || {};
+
+ require XML::Simple;
+ my $config = XML::Simple::XMLin(
+ $file,
+ ForceArray => [ qw( component model view controller ) ],
+ %$args
+ );
+
+ return $class->_coerce( $config );
+}
+
+sub _coerce {
+ # coerce the XML-parsed config into the correct format
+ my $class = shift;
+ my $config = shift;
+ my $out;
+ for my $k ( keys %$config ) {
+ my $ref = $config->{ $k };
+ my $name = ref $ref eq 'HASH' ? delete $ref->{ name } : undef;
+ if ( defined $name ) {
+ $out->{ $k }->{ $name } = $ref;
+ }
+ else {
+ $out->{ $k } = $ref;
+ }
+ }
+ $out;
+}
+
+=head2 requires_all_of( )
+
+Specifies that this module requires L and L
+in order to work.
+
+=cut
+
+sub requires_all_of { 'XML::Simple', 'XML::NamespaceSupport' }
+
+=head1 CAVEATS
+
+=head2 Strict Mode
+
+If, by some chance, L 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 for
+more information.
+
+=head1 AUTHORS
+
+Brian Cassidy Ebricas@cpan.orgE
+
+Joel Bernstein Erataxis@cpan.orgE
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2006-2016 by Brian Cassidy
+
+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;