changes file updated
[p5sagit/Config-Any.git] / lib / Config / Any / INI.pm
CommitLineData
f0e3c221 1package Config::Any::INI;
2
3use strict;
4use warnings;
5
6our $MAP_SECTION_SPACE_TO_NESTED_KEY = 1;
7
8=head1 NAME
9
10Config::Any::INI - Load INI config files
11
12=head1 DESCRIPTION
13
14Loads INI files. Example:
15
16 name=TestApp
17
18 [Controller::Foo]
19 foo=bar
20
21 [Model::Baz]
22 qux=xyzzy
23
24=head1 METHODS
25
26=head2 extensions( )
27
28return an array of valid extensions (C<ini>).
29
30=cut
31
32sub extensions {
33 return qw( ini );
34}
35
36=head2 load( $file )
37
38Attempts to load C<$file> as an INI file.
39
40=cut
41
42sub load {
43 my $class = shift;
44 my $file = shift;
45
46 require Config::Tiny;
47 my $config = Config::Tiny->read( $file );
5770ffc0 48
49 die $Config::Tiny::errstr if not defined $config;
50
5a2e0210 51 my $out = delete $config->{ _ } || {};
f0e3c221 52
92a04e78 53 for my $k ( keys %$config ) {
5a2e0210 54 my @keys = split /\s+/, $k;
92a04e78 55 my $ref = $config->{ $k };
f0e3c221 56
5a2e0210 57 if ( $MAP_SECTION_SPACE_TO_NESTED_KEY && @keys > 1 ) {
92a04e78 58 my ( $a, $b ) = @keys[ 0, 1 ];
59 $out->{ $a }->{ $b } = $ref;
60 }
61 else {
5a2e0210 62 $out->{ $k } = { %{ $out->{ $k } || {} }, %$ref };
f0e3c221 63 }
64 }
5a2e0210 65
f0e3c221 66 return $out;
67}
68
72628dc7 69=head2 is_supported( )
70
71Returns true if L<Config::Tiny> is available.
72
73=cut
74
75sub is_supported {
76 eval { require Config::Tiny; };
77 return $@ ? 0 : 1;
78}
79
f0e3c221 80=head1 PACKAGE VARIABLES
81
82=over 4
83
84=item $MAP_SECTION_SPACE_TO_NESTED_KEY (boolean)
85
86This variable controls whether spaces in INI section headings will be expanded into nested hash keys.
87e.g. it controls whether [Full Power] maps to $config->{'Full Power'} or $config->{'Full'}->{'Power'}
88
89By default it is set to 1 (i.e. true).
90
91Set it to 0 to preserve literal spaces in section headings:
92
93 use Config::Any;
94 use Config::Any::INI;
95 $Config::Any::INI::MAP_SECTION_SPACE_TO_NESTED_KEY = 0;
96
97=back
98
a918b0b8 99=head1 AUTHORS
f0e3c221 100
a918b0b8 101Brian Cassidy E<lt>bricas@cpan.orgE<gt>
f0e3c221 102
a918b0b8 103Joel Bernstein E<lt>rataxis@cpan.orgE<gt>
f0e3c221 104
105=head1 COPYRIGHT AND LICENSE
106
a918b0b8 107Copyright 2007 by Brian Cassidy, portions copyright 2006, 2007 by Joel Bernstein
f0e3c221 108
109This library is free software; you can redistribute it and/or modify
110it under the same terms as Perl itself.
111
112=head1 SEE ALSO
113
114=over 4
115
116=item * L<Catalyst>
117
118=item * L<Config::Any>
119
120=item * L<Config::Tiny>
121
122=back
123
124=cut
125
1261;