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 | ||
72628dc7 | 76 | =head2 is_supported( ) |
77 | ||
78 | Returns true if L<XML::Simple> is available. | |
79 | ||
80 | =cut | |
81 | ||
82 | sub is_supported { | |
83 | eval { require XML::Simple; }; | |
84 | return $@ ? 0 : 1; | |
85 | } | |
86 | ||
a918b0b8 | 87 | =head1 AUTHORS |
f0e3c221 | 88 | |
a918b0b8 | 89 | Brian Cassidy E<lt>bricas@cpan.orgE<gt> |
f0e3c221 | 90 | |
a918b0b8 | 91 | Joel Bernstein E<lt>rataxis@cpan.orgE<gt> |
f0e3c221 | 92 | |
93 | =head1 COPYRIGHT AND LICENSE | |
94 | ||
a918b0b8 | 95 | Copyright 2007 by Brian Cassidy |
f0e3c221 | 96 | |
97 | This library is free software; you can redistribute it and/or modify | |
98 | it under the same terms as Perl itself. | |
99 | ||
100 | =head1 SEE ALSO | |
101 | ||
102 | =over 4 | |
103 | ||
104 | =item * L<Catalyst> | |
105 | ||
106 | =item * L<Config::Any> | |
107 | ||
108 | =item * L<XML::Simple> | |
109 | ||
110 | =back | |
111 | ||
112 | =cut | |
113 | ||
114 | 1; |