# NAME

Config::ENV - Various config determined by %ENV

# SYNOPSIS

    package MyConfig;
    
    use Config::ENV 'PLACK_ENV'; # use $ENV{PLACK_ENV} to determine config
    
    common +{
      name => 'foobar',
    };
    
    config development => +{
      dsn_user => 'dbi:mysql:dbname=user;host=localhost',
    };
    
    config test => +{
      dsn_user => 'dbi:mysql:dbname=user;host=localhost',
    };
    
    config production => +{
      dsn_user => 'dbi:mysql:dbname=user;host=127.0.0.254',
    };
    
    config production_bot => +{
      parent('production'),
      bot => 1,
    };

    # Use it

    use MyConfig;
    MyConfig->param('dsn_user'); #=> ...

# DESCRIPTION

Config::ENV is for switching various configurations by environment variable.

# CONFIG DEFINITION

use this module in your config package:

    package MyConfig;
    use Config::ENV 'FOO_ENV';

    common +{
      name => 'foobar',
    };

    config development => +{};
    config production  => +{};

    1;

- common($hash)

    Define common config. This $hash is merged with specific environment config.

- config($env, $hash);

    Define environment config. This $hash is just enabled in $env environment.

- parent($env);

    Expand $env configuration to inherit it.

- load($filename);

    \`do $filename\` and expand it. This can be used following:

        # MyConfig.pm
        common +{
          API_KEY => 'Set in config.pl',
          API_SECRET => 'Set in config.pl',
          load('config.pl),
        };

        # config.pl
        +{
          API_KEY => 'XFATEAFAFASG',
          API_SECRET => 'ced3a7927fcf22cba72c2559326be2b8e3f14a0f',
        }

## EXPORT

You can specify default export name in config class. If you specify 'export' option as following:

    package MyConfig;
    use Config::ENV 'FOO_ENV', export => 'config';

    ...;

and use it with 'config' function.

    package Foobar;
    use MyConfig; # exports 'config' function

    config->param('...');

# METHODS

- config->param($name)

    Returns config variable named $name.

- $guard = config->local(%hash)

    This is for scope limited config. You can use this when you use other values in temporary. Returns guard object.

        is config->param('name'), 'original value';
        {
          my $guard = config->local(name => 'localized');
          is config->param('name'), 'localized';
        };
        is config->param('name'), 'original value';

- config->env

    Returns current environment name.

- config->current

    Returns current configuration as HashRef.

# AUTHOR

cho45 <cho45@lowreal.net>

# SEE ALSO

# LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.