From: Jean-Philippe Lang Date: Fri, 25 Feb 2011 14:30:05 +0000 (+0000) Subject: Adds a method to temporarily override configuration settings. X-Git-Tag: 1.2.0~874 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e1ad561cf652713bbdebe2d60fc4c680fb367ec1;p=redmine.git 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 --- 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)