aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRick Olson <technoweenie@gmail.com>2007-11-08 15:41:46 +0000
committerRick Olson <technoweenie@gmail.com>2007-11-08 15:41:46 +0000
commitfcfcc707d4ae94441496d36e78a598914df3cebc (patch)
tree6b25ab4300aa7e617af76551a4c06016745cc278
parentf1b1af88b530c101dc4bf6157bbd1f9c39a670d7 (diff)
downloadrails-fcfcc707d4ae94441496d36e78a598914df3cebc.tar.gz
rails-fcfcc707d4ae94441496d36e78a598914df3cebc.tar.bz2
rails-fcfcc707d4ae94441496d36e78a598914df3cebc.zip
Ensure the plugin loader only loads plugins once. Closes #10102 [haruki_zaemon]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8116 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--railties/CHANGELOG2
-rw-r--r--railties/lib/rails/plugin.rb1
-rw-r--r--railties/test/plugin_test.rb11
3 files changed, 14 insertions, 0 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index 2ee6fac28e..ddc1f7bc2a 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Ensure the plugin loader only loads plugins once. Closes #10102 [haruki_zaemon]
+
* Refactor Plugin Loader. Add plugin lib paths early, and add lots of tests. Closes #9795 [lazyatom]
* Added --skip-timestamps to generators that produce models #10036 [tpope]
diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb
index 2feb90bf14..be392195d4 100644
--- a/railties/lib/rails/plugin.rb
+++ b/railties/lib/rails/plugin.rb
@@ -34,6 +34,7 @@ module Rails
# Evaluates a plugin's init.rb file
def load(initializer)
+ return if loaded?
report_nonexistant_or_empty_plugin! unless valid?
evaluate_init_rb(initializer)
@loaded = true
diff --git a/railties/test/plugin_test.rb b/railties/test/plugin_test.rb
index a791e42ae8..0f08c314db 100644
--- a/railties/test/plugin_test.rb
+++ b/railties/test/plugin_test.rb
@@ -119,6 +119,17 @@ uses_mocha "Plugin Tests" do
z = plugin_for("path/z")
assert_equal [a, b, z], [b, z, a].sort
end
+
+ def test_should_only_be_loaded_once
+ plugin = plugin_for(@valid_plugin_path)
+ assert !plugin.loaded?
+ plugin.expects(:evaluate_init_rb)
+ assert_nothing_raised do
+ plugin.send(:load, @initializer)
+ plugin.send(:load, @initializer)
+ end
+ assert plugin.loaded?
+ end
private