From e1ad561cf652713bbdebe2d60fc4c680fb367ec1 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 25 Feb 2011 14:30:05 +0000 Subject: [PATCH] Adds a method to temporarily override configuration settings. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4949 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/configuration.rb | 10 ++++++++++ test/unit/lib/redmine/configuration_test.rb | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/redmine/configuration.rb b/lib/redmine/configuration.rb index 1d2443a9c..34880ce58 100644 --- a/lib/redmine/configuration.rb +++ b/lib/redmine/configuration.rb @@ -66,6 +66,16 @@ module Redmine @config[name] end + # Yields a block with the specified hash configuration settings + def with(settings) + settings.stringify_keys! + load unless @config + was = settings.keys.inject({}) {|h,v| h[v] = @config[v]; h} + @config.merge! settings + yield if block_given? + @config.merge! was + end + private def load_from_yaml(filename, env) diff --git a/test/unit/lib/redmine/configuration_test.rb b/test/unit/lib/redmine/configuration_test.rb index 239f2d3d4..d172c95f5 100644 --- a/test/unit/lib/redmine/configuration_test.rb +++ b/test/unit/lib/redmine/configuration_test.rb @@ -41,6 +41,15 @@ class Redmine::ConfigurationTest < ActiveSupport::TestCase assert_equal 'bar', @conf['somesetting'] end + def test_with + load_conf('default.yml', 'test') + assert_equal 'foo', @conf['somesetting'] + @conf.with 'somesetting' => 'bar' do + assert_equal 'bar', @conf['somesetting'] + end + assert_equal 'foo', @conf['somesetting'] + end + private def load_conf(file, env)