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