diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index 36797026c44aa87929fef4c33a3a5a15d0471e3b..4e4e2600568d9c77b956fa62c23685206830deae 100644 --- a/railties/lib/initializer.rb +++ b/railties/lib/initializer.rb @@ -192,6 +192,7 @@ def load_plugins plugin.load end end + ensure_all_registered_plugins_are_loaded! $LOAD_PATH.uniq! end @@ -339,6 +340,16 @@ def load_application_initializers load(initializer) end end + + private + def ensure_all_registered_plugins_are_loaded! + unless configuration.plugins.nil? + unless loaded_plugins == configuration.plugins + missing_plugins = configuration.plugins - loaded_plugins + raise LoadError, "Could not locate the following plugins: #{missing_plugins.to_sentence}" + end + end + end end # The Configuration class holds all the parameters for the Initializer and diff --git a/railties/lib/plugin/locator.rb b/railties/lib/plugin/locator.rb index 2e3b34cee6e242399e240a3efa29189eda911e6f..6c4f2605bb1e53dce47c7a056e59c1f70694bddf 100644 --- a/railties/lib/plugin/locator.rb +++ b/railties/lib/plugin/locator.rb @@ -29,27 +29,11 @@ def located_plugins class FileSystemLocator < Locator private def located_plugins - returning locate_plugins do |loaders| - ensure_all_registered_plugins_are_loaded!(loaders) - end - end - - def locate_plugins initializer.configuration.plugin_paths.flatten.inject([]) do |plugins, path| plugins.concat locate_plugins_under(path) plugins end.flatten end - - def ensure_all_registered_plugins_are_loaded!(loaders) - registered_plugins = initializer.configuration.plugins - unless registered_plugins.nil? || registered_plugins.empty? - missing_plugins = registered_plugins - loaders.map(&:name) - unless missing_plugins.empty? - raise LoadError, "Could not locate the following plugins: #{missing_plugins.to_sentence}" - end - end - end # This starts at the base path looking for directories that pass the plugin_path? test of the Plugin::Loader. # Since plugins can be nested arbitrarily deep within an unspecified number of intermediary directories, diff --git a/railties/test/plugin_locator_test.rb b/railties/test/plugin_locator_test.rb index 5ea89844d02ad39514e4c5b95f2688097d1f86f6..36f9e272e4f76abdc66dcba98659ade770cc3ee9 100644 --- a/railties/test/plugin_locator_test.rb +++ b/railties/test/plugin_locator_test.rb @@ -21,21 +21,21 @@ def test_only_the_specified_plugins_are_located_in_the_order_listed assert_equal plugin_names, @locator.plugin_names end + def test_all_plugins_are_loaded_when_registered_plugin_list_is_untouched + failure_tip = "It's likely someone has added a new plugin fixture without updating this list" + assert_equal %w(a acts_as_chunky_bacon plugin_with_no_lib_dir stubby), @locator.plugin_names, failure_tip + end + + def test_registering_a_plugin_name_that_does_not_exist_raises_a_load_error only_load_the_following_plugins! %w(stubby acts_as_a_non_existant_plugin) assert_raises(LoadError) do - @locator.plugins + @initializer.load_plugins end end - def test_all_plugins_are_loaded_when_registered_plugin_list_is_untouched - failure_tip = "It's likely someone has added a new plugin fixture without updating this list" - assert_equal %w(a acts_as_chunky_bacon plugin_with_no_lib_dir stubby), @locator.plugin_names, failure_tip - end - private def new_locator(initializer = @initializer) Rails::Plugin::FileSystemLocator.new(initializer) - end - + end end \ No newline at end of file