diff options
-rw-r--r-- | activesupport/CHANGELOG | 2 | ||||
-rw-r--r-- | activesupport/lib/active_support/dependencies.rb | 9 | ||||
-rw-r--r-- | activesupport/test/dependencies_test.rb | 2 |
3 files changed, 11 insertions, 2 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 5731d94911..b5673f8a71 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Introduce Dependencies.warnings_on_first_load setting. If true, enables warnings on first load of a require_dependency. Otherwise, loads without warnings. Disabled (set to false) by default. [Jeremy Kemper] + * Active Support is warnings-safe. #1792 [Eric Hodel] * Introduce enable_warnings counterpart to silence_warnings. Turn warnings on when loading a file for the first time if Dependencies.mechanism == :load. Common mistakes such as redefined methods will print warnings to stderr. [Jeremy Kemper] diff --git a/activesupport/lib/active_support/dependencies.rb b/activesupport/lib/active_support/dependencies.rb index bce5855c4a..64732db136 100644 --- a/activesupport/lib/active_support/dependencies.rb +++ b/activesupport/lib/active_support/dependencies.rb @@ -6,6 +6,10 @@ require File.dirname(__FILE__) + '/core_ext/kernel' module Dependencies #:nodoc: extend self + # Should we turn on Ruby warnings on the first load of dependent files? + mattr_accessor :warnings_on_first_load + self.warnings_on_first_load = false + # All files ever loaded. mattr_accessor :history self.history = Set.new @@ -50,8 +54,9 @@ module Dependencies #:nodoc: loaded << file_name begin - # Enable warnings iff this file has not been loaded before. - if history.include?(file_name) + # Enable warnings iff this file has not been loaded before and + # warnings_on_first_load is set. + if !warnings_on_first_load or history.include?(file_name) load load_file_name else enable_warnings { load load_file_name } diff --git a/activesupport/test/dependencies_test.rb b/activesupport/test/dependencies_test.rb index b801ce6cf0..ab28c4668e 100644 --- a/activesupport/test/dependencies_test.rb +++ b/activesupport/test/dependencies_test.rb @@ -46,6 +46,7 @@ class DependenciesTest < Test::Unit::TestCase def test_warnings_should_be_enabled_on_first_load old_mechanism, Dependencies.mechanism = Dependencies.mechanism, :load + old_warnings, Dependencies.warnings_on_first_load = Dependencies.warnings_on_first_load, true filename = "#{File.dirname(__FILE__)}/dependencies/check_warnings" $check_warnings_load_count = 0 @@ -78,6 +79,7 @@ class DependenciesTest < Test::Unit::TestCase assert Dependencies.loaded.include?(filename) ensure Dependencies.mechanism = old_mechanism + Dependencies.warnings_on_first_load = old_warnings end def test_mutual_dependencies_dont_infinite_loop |