X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FConfig-Any.git;a=blobdiff_plain;f=lib%2FConfig%2FAny%2FXML.pm;h=46060c4b3e2cc4791f9e35291f37f108ca6d3ded;hp=42a83806f9d6d60f221cf98801452d7b24b2267b;hb=c793253e5f2ad3ca9d60e96e07a5d87fa344ec31;hpb=e967a60fa6fb5adeb6ead013b0b60289b2a92e2e diff --git a/lib/Config/Any/XML.pm b/lib/Config/Any/XML.pm index 42a8380..46060c4 100644 --- a/lib/Config/Any/XML.pm +++ b/lib/Config/Any/XML.pm @@ -1,104 +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 $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; -} - -=head1 AUTHOR - -=over 4 - -=item * Brian Cassidy Ebricas@cpan.orgE - -=item * Joel Bernstein Erataxis@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; +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 ? 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 in order to work. + +=cut + +sub requires_all_of { 'XML::Simple' } + +=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-2009 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;