>From bdd7c635f067888a6096ecd64e9583927cbf27e7 Mon Sep 17 00:00:00 2001 From: Jens Rehsack Date: Thu, 27 Dec 2012 18:36:06 +0100 Subject: [PATCH] add DANCER_CONFFILE environment variable support with test --- lib/Dancer/Config.pm | 22 +++++++++++++++++++-- t/01_config/09_env.t | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 t/01_config/09_env.t diff --git a/lib/Dancer/Config.pm b/lib/Dancer/Config.pm index 6ca2041..3212891 100644 --- a/lib/Dancer/Config.pm +++ b/lib/Dancer/Config.pm @@ -144,7 +144,11 @@ sub _get_setting { return $SETTINGS->{$setting}; } -sub conffile { path(setting('confdir') || setting('appdir'), 'config.yml') } +sub conffile { + my $conf_dir = setting('confdir') || setting('appdir'); + my $conf_file = setting('conffile') || 'config.yml'; + path($conf_dir, $conf_file); +} sub environment_file { my $env = setting('environment'); @@ -160,6 +164,11 @@ sub init_confdir { setting confdir => $ENV{DANCER_CONFDIR} || setting('appdir'); } +sub init_conffile { + return setting('conffile') if setting('conffile'); + setting conffile => $ENV{DANCER_CONFFILE} || 'config.yml'; +} + sub init_envdir { return setting('envdir') if setting('envdir'); my $appdirpath = defined setting('appdir') ? @@ -170,6 +179,7 @@ sub init_envdir { } sub load { + init_conffile(); init_confdir(); init_envdir(); @@ -645,7 +655,7 @@ Maximum size of route cache (e.g. 1024, 2M) - see L Maximum number of routes to cache - see L -=head2 DANCER_CONFDIR and DANCER_ENVDIR +=head2 DANCER_CONFFILE, DANCER_CONFDIR and DANCER_ENVDIR It's possible to set the configuration directory and environment directory using this two environment variables. Setting `DANCER_CONFDIR` will have the same effect as doing @@ -656,6 +666,14 @@ and setting `DANCER_ENVDIR` will be similar to: set envdir => '/path/to/environments' +While setting `DANCER_CONFFILE` is analogous to + + set conffile => 'cfgname.yml' + +results no setting in + + set conffile => 'config.yml' + =head1 AUTHOR This module has been written by Alexis Sukrieh and others, diff --git a/t/01_config/09_env.t b/t/01_config/09_env.t new file mode 100644 index 0000000..875f326 --- /dev/null +++ b/t/01_config/09_env.t @@ -0,0 +1,53 @@ +use strict; +use warnings; +use Test::More import => ['!pass']; + +plan skip_all => "YAML needed to run this tests" + unless Dancer::ModuleLoader->load('YAML'); +plan skip_all => "File::Temp 0.22 required" + unless Dancer::ModuleLoader->load( 'File::Temp', '0.22' ); +plan skip_all => "File::Basename required" + unless Dancer::ModuleLoader->load('File::Basename'); +plan tests => 7; + +use Dancer ':syntax'; +use File::Spec; +use lib File::Spec->catdir( 't', 'lib' ); +use TestUtils; + +my $tmpdir = File::Temp->newdir( CLEANUP => 1 ); +$ENV{DANCER_CONFDIR} = $tmpdir->dirname; +my $tmpfile = File::Temp->new( TEMPLATE => "dancXXXX", + SUFFIX => ".yml", + DIR => $tmpdir->dirname, + CLEANUP => 1 ); +$ENV{DANCER_CONFFILE} = File::Basename::basename($tmpfile->filename); + +# create the conffile +my $conf = ' +port: 4500 +startup_info: 0 +charset: "UTF8" +logger: file +'; +write_file($tmpfile => $conf); + +ok(Dancer::Config->load, 'Config load works with a conffile'); + +my $conffile = Dancer::Config->conffile; +is $conffile => $tmpfile, 'conffile/confdir from $ENV used'; + +is(setting('environment'), 'development', + 'setting environment looks good'); +is(setting('port'), '4500', + 'setting port looks good'); +is(setting('startup_info'), 0, + 'setting startup_info looks good'); +is(setting('logger'), 'file', + 'setting logger looks good'); + +# issue GH#153 +is(setting('charset'), 'utf8', + "charset setting is normalized"); + +File::Temp::cleanup(); -- 1.7.10.2 (Apple Git-33)