Config::Any::INI - Load INI config files


Config-Any documentation Contained in the Config-Any distribution.

Index


Code Index:

NAME

Top

Config::Any::INI - Load INI config files

DESCRIPTION

Top

Loads INI files. Example:

    name=TestApp

    [Controller::Foo]
    foo=bar

    [Model::Baz]
    qux=xyzzy

METHODS

Top

extensions( )

return an array of valid extensions (ini).

load( $file )

Attempts to load $file as an INI file.

requires_all_of( )

Specifies that this module requires Config::Tiny in order to work.

PACKAGE VARIABLES

Top

$MAP_SECTION_SPACE_TO_NESTED_KEY (boolean)

This variable controls whether spaces in INI section headings will be expanded into nested hash keys. e.g. it controls whether [Full Power] maps to $config->{'Full Power'} or $config->{'Full'}->{'Power'}

By default it is set to 1 (i.e. true).

Set it to 0 to preserve literal spaces in section headings:

    use Config::Any;
    use Config::Any::INI;
    $Config::Any::INI::MAP_SECTION_SPACE_TO_NESTED_KEY = 0;

AUTHORS

Top

Brian Cassidy <bricas@cpan.org>

Joel Bernstein <rataxis@cpan.org>

COPYRIGHT AND LICENSE

Top

SEE ALSO

Top

* Catalyst
* Config::Any
* Config::Tiny

Config-Any documentation Contained in the Config-Any distribution.
package Config::Any::INI;

use strict;
use warnings;

use base 'Config::Any::Base';

our $MAP_SECTION_SPACE_TO_NESTED_KEY = 1;

sub extensions {
    return qw( ini );
}

sub load {
    my $class = shift;
    my $file  = shift;

    require Config::Tiny;
    my $config = Config::Tiny->read( $file );

    die $Config::Tiny::errstr if not defined $config;

    my $out = delete $config->{ _ } || {};

    for my $k ( keys %$config ) {
        my @keys = split /\s+/, $k;
        my $ref = $config->{ $k };

        if ( $MAP_SECTION_SPACE_TO_NESTED_KEY && @keys > 1 ) {
            my ( $a, $b ) = @keys[ 0, 1 ];
            $out->{ $a }->{ $b } = $ref;
        }
        else {
            $out->{ $k } = { %{ $out->{ $k } || {} }, %$ref };
        }
    }

    return $out;
}

sub requires_all_of { 'Config::Tiny' }

1;