added is_supported() to see what plugins we can use
[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 );
48
92a04e78 49 my $main = delete $config->{ _ };
f0e3c221 50 my $out;
92a04e78 51 $out->{ $_ } = $main->{ $_ } for keys %$main;
f0e3c221 52
92a04e78 53 for my $k ( keys %$config ) {
f0e3c221 54 my @keys = split /\s+/, $k if $MAP_SECTION_SPACE_TO_NESTED_KEY;
92a04e78 55 my $ref = $config->{ $k };
f0e3c221 56
92a04e78 57 if ( @keys > 1 ) {
58 my ( $a, $b ) = @keys[ 0, 1 ];
59 $out->{ $a }->{ $b } = $ref;
60 }
61 else {
62 $out->{ $k } = $ref;
f0e3c221 63 }
64 }
65 return $out;
66}
67
72628dc7 68=head2 is_supported( )
69
70Returns true if L<Config::Tiny> is available.
71
72=cut
73
74sub is_supported {
75 eval { require Config::Tiny; };
76 return $@ ? 0 : 1;
77}
78
f0e3c221 79=head1 PACKAGE VARIABLES
80
81=over 4
82
83=item $MAP_SECTION_SPACE_TO_NESTED_KEY (boolean)
84
85This variable controls whether spaces in INI section headings will be expanded into nested hash keys.
86e.g. it controls whether [Full Power] maps to $config->{'Full Power'} or $config->{'Full'}->{'Power'}
87
88By default it is set to 1 (i.e. true).
89
90Set it to 0 to preserve literal spaces in section headings:
91
92 use Config::Any;
93 use Config::Any::INI;
94 $Config::Any::INI::MAP_SECTION_SPACE_TO_NESTED_KEY = 0;
95
96=back
97
a918b0b8 98=head1 AUTHORS
f0e3c221 99
a918b0b8 100Brian Cassidy E<lt>bricas@cpan.orgE<gt>
f0e3c221 101
a918b0b8 102Joel Bernstein E<lt>rataxis@cpan.orgE<gt>
f0e3c221 103
104=head1 COPYRIGHT AND LICENSE
105
a918b0b8 106Copyright 2007 by Brian Cassidy, portions copyright 2006, 2007 by Joel Bernstein
f0e3c221 107
108This library is free software; you can redistribute it and/or modify
109it under the same terms as Perl itself.
110
111=head1 SEE ALSO
112
113=over 4
114
115=item * L<Catalyst>
116
117=item * L<Config::Any>
118
119=item * L<Config::Tiny>
120
121=back
122
123=cut
124
1251;