X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FConfig%2FAny%2FXML.pm;h=c9b979fa37e3d6145f263ed671c6037b70122f24;hb=c84f1613b60ec2bd2df1a88e6618f36246c24c4b;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..c9b979f 100644
--- a/lib/Config/Any/XML.pm
+++ b/lib/Config/Any/XML.pm
@@ -1,82 +1,114 @@
-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;
+
+=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 ? delete $ref->{ name } : undef;
+ if ( defined $name ) {
+ $out->{ $k }->{ $name } = $ref;
+ }
+ else {
+ $out->{ $k } = $ref;
+ }
+ }
+ $out;
+}
+
+=head2 is_supported( )
+
+Returns true if L is available.
+
+=cut
+
+sub is_supported {
+ eval { require XML::Simple; };
+ return $@ ? 0 : 1;
+}
+
+=head1 AUTHORS
+
+Brian Cassidy Ebricas@cpan.orgE
+
+Joel Bernstein Erataxis@cpan.orgE
+
+=head1 COPYRIGHT AND LICENSE
+
+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.
+
+=head1 SEE ALSO
+
+=over 4
+
+=item * L
+
+=item * L
+
+=item * L
+
+=back
+
+=cut
+
+1;