distro work
[p5sagit/Config-Any.git] / lib / Config / Any / XML.pm
CommitLineData
f0e3c221 1package Config::Any::XML;
2
3use strict;
4use warnings;
5
6=head1 NAME
7
8Config::Any::XML - Load XML config files
9
10=head1 DESCRIPTION
11
12Loads XML files. Example:
13
14 <config>
15 <name>TestApp</name>
16 <component name="Controller::Foo">
17 <foo>bar</foo>
18 </component>
19 <model name="Baz">
20 <qux>xyzzy</qux>
21 </model>
22 </config>
23
24=head1 METHODS
25
26=head2 extensions( )
27
28return an array of valid extensions (C<xml>).
29
30=cut
31
32sub extensions {
33 return qw( xml );
34}
35
36=head2 load( $file )
37
38Attempts to load C<$file> as an XML file.
39
40=cut
41
42sub load {
43 my $class = shift;
44 my $file = shift;
45
46 require XML::Simple;
47 XML::Simple->import;
48 my $config = XMLin(
49 $file,
50 ForceArray => [ qw( component model view controller ) ],
51 );
52
53 return $class->_coerce($config);
54}
55
56sub _coerce {
57 # coerce the XML-parsed config into the correct format
58 my $class = shift;
59 my $config = shift;
60 my $out;
61 for my $k (keys %$config) {
62 my $ref = $config->{$k};
63 my $name = ref $ref ? delete $ref->{name} : undef;
64 if (defined $name) {
65 $out->{$k}->{$name} = $ref;
66 } else {
67 $out->{$k} = $ref;
68 }
69 }
70 $out;
71}
72
73=head1 AUTHOR
74
75=over 4
76
77=item * Brian Cassidy E<lt>bricas@cpan.orgE<gt>
78
79=item * Joel Bernstein E<lt>rataxis@cpan.orgE<gt>
80
81=back
82
83=head1 COPYRIGHT AND LICENSE
84
85Copyright 2006 by Brian Cassidy
86
87This library is free software; you can redistribute it and/or modify
88it under the same terms as Perl itself.
89
90=head1 SEE ALSO
91
92=over 4
93
94=item * L<Catalyst>
95
96=item * L<Config::Any>
97
98=item * L<XML::Simple>
99
100=back
101
102=cut
103
1041;