mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added the :all option to config.plugins thatll include the rest of the plugins not already explicitly named (closes #9613) [fcheung]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7531 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
83c17f2089
commit
6dd10d85da
6 changed files with 69 additions and 9 deletions
|
@ -1,5 +1,12 @@
|
|||
*SVN*
|
||||
|
||||
* Added the :all option to config.plugins that'll include the rest of the plugins not already explicitly named #9613 [fcheung]. Example:
|
||||
|
||||
# Loads :classic_pagination before all the other plugins
|
||||
config.plugins = [ :classic_pagination, :all ]
|
||||
|
||||
* Removed deprecated task names, like clear_logs, in favor of the new namespaced style [DHH]
|
||||
|
||||
* Support multiple config.after_initialize blocks so plugins and apps can more easily cooperate. #9582 [zdennis]
|
||||
|
||||
* Added db:drop:all to drop all databases declared in config/database.yml [DHH]
|
||||
|
|
|
@ -16,8 +16,9 @@ Rails::Initializer.run do |config|
|
|||
# Skip frameworks you're not going to use (only works if using vendor/rails)
|
||||
# config.frameworks -= [ :active_resource, :action_mailer ]
|
||||
|
||||
# Only load the plugins named here, by default all plugins in vendor/plugins are loaded
|
||||
# config.plugins = %W( exception_notification ssl_requirement )
|
||||
# Only load the plugins named here, in the order given. By default all plugins in vendor/plugins are loaded, in alphabetical order
|
||||
# :all can be used as a placeholder for all plugins not explicitly named.
|
||||
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
||||
|
||||
# Add additional load paths for your own custom dirs
|
||||
# config.load_paths += %W( #{RAILS_ROOT}/extras )
|
||||
|
|
|
@ -177,6 +177,9 @@ module Rails
|
|||
# If an array of plugin names is specified in config.plugins, only those plugins will be loaded
|
||||
# and they plugins will be loaded in that order. Otherwise, plugins are loaded in alphabetical
|
||||
# order.
|
||||
#
|
||||
# if config.plugins ends contains :all then the named plugins will be loaded in the given order and all other
|
||||
# plugins will be loaded in alphabetical order
|
||||
def load_plugins
|
||||
configuration.plugin_locators.each do |locator|
|
||||
locator.new(self).each do |plugin|
|
||||
|
@ -339,8 +342,8 @@ module Rails
|
|||
private
|
||||
def ensure_all_registered_plugins_are_loaded!
|
||||
unless configuration.plugins.nil?
|
||||
unless loaded_plugins == configuration.plugins
|
||||
missing_plugins = configuration.plugins - loaded_plugins
|
||||
if configuration.plugins.detect {|plugin| plugin != :all && !loaded_plugins.include?( plugin)}
|
||||
missing_plugins = configuration.plugins - (loaded_plugins + [:all])
|
||||
raise LoadError, "Could not locate the following plugins: #{missing_plugins.to_sentence}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -36,8 +36,16 @@ module Rails
|
|||
def enabled?
|
||||
!explicit_plugin_loading_order? || registered?
|
||||
end
|
||||
|
||||
|
||||
def explicitly_enabled?
|
||||
!explicit_plugin_loading_order? || explicitly_registered?
|
||||
end
|
||||
|
||||
def registered?
|
||||
explicit_plugin_loading_order? && registered_plugins_names_plugin?(name)
|
||||
end
|
||||
|
||||
def explicitly_registered?
|
||||
explicit_plugin_loading_order? && registered_plugins.include?(name)
|
||||
end
|
||||
|
||||
|
@ -54,6 +62,10 @@ module Rails
|
|||
config.plugins
|
||||
end
|
||||
|
||||
def registered_plugins_names_plugin?(plugin_name)
|
||||
registered_plugins.include?(plugin_name) || registered_plugins.include?(:all)
|
||||
end
|
||||
|
||||
def explicit_plugin_loading_order?
|
||||
!registered_plugins.nil?
|
||||
end
|
||||
|
@ -104,20 +116,31 @@ module Rails
|
|||
|
||||
# Evaluate in init.rb
|
||||
def evaluate
|
||||
silence_warnings { eval(IO.read(init_path), binding, init_path)} if has_init_file?
|
||||
silence_warnings { eval(IO.read(init_path), binding, init_path) } if has_init_file?
|
||||
end
|
||||
|
||||
def <=>(other_plugin_loader)
|
||||
if explicit_plugin_loading_order?
|
||||
if non_existent_plugin = [self, other_plugin_loader].detect {|plugin| !registered_plugins.include?(plugin.name)}
|
||||
if non_existent_plugin = [self, other_plugin_loader].detect { |plugin| !registered_plugins_names_plugin?(plugin.name) }
|
||||
plugin_does_not_exist!(non_existent_plugin.name)
|
||||
end
|
||||
|
||||
registered_plugins.index(name) <=> registered_plugins.index(other_plugin_loader.name)
|
||||
if !explicitly_enabled? && !other_plugin_loader.explicitly_enabled?
|
||||
name <=> other_plugin_loader.name
|
||||
elsif registered_plugins.include?(:all) && (!explicitly_enabled? || !other_plugin_loader.explicitly_enabled?)
|
||||
effective_index = explicitly_enabled? ? registered_plugins.index(name) : registered_plugins.index(:all)
|
||||
other_effective_index = other_plugin_loader.explicitly_enabled? ?
|
||||
registered_plugins.index(other_plugin_loader.name) : registered_plugins.index(:all)
|
||||
|
||||
effective_index <=> other_effective_index
|
||||
else
|
||||
registered_plugins.index(name) <=> registered_plugins.index(other_plugin_loader.name)
|
||||
end
|
||||
|
||||
else
|
||||
name <=> other_plugin_loader.name
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -14,6 +14,18 @@ class TestPluginLoader < Test::Unit::TestCase
|
|||
assert loader.send(:explicit_plugin_loading_order?)
|
||||
end
|
||||
|
||||
def test_enabled_if_not_named_explicitly
|
||||
stubby_loader = loader_for(@valid_plugin_path)
|
||||
acts_as_loader = loader_for('acts_as/acts_as_chunky_bacon')
|
||||
|
||||
only_load_the_following_plugins! ['stubby', :all]
|
||||
assert stubby_loader.send(:enabled?)
|
||||
assert acts_as_loader.send(:enabled?)
|
||||
|
||||
assert stubby_loader.send(:explicitly_enabled?)
|
||||
assert !acts_as_loader.send(:explicitly_enabled?)
|
||||
end
|
||||
|
||||
def test_determining_whether_a_given_plugin_is_loaded
|
||||
plugin_loader = loader_for(@valid_plugin_path)
|
||||
assert !plugin_loader.loaded?
|
||||
|
|
|
@ -26,6 +26,20 @@ class TestPluginFileSystemLocator < Test::Unit::TestCase
|
|||
assert_equal %w(a acts_as_chunky_bacon plugin_with_no_lib_dir stubby), @locator.plugin_names, failure_tip
|
||||
end
|
||||
|
||||
def test_all_plugins_loaded_when_all_is_used
|
||||
plugin_names = ['stubby', 'acts_as_chunky_bacon', :all]
|
||||
only_load_the_following_plugins! plugin_names
|
||||
failure_tip = "It's likely someone has added a new plugin fixture without updating this list"
|
||||
assert_equal %w(stubby acts_as_chunky_bacon a plugin_with_no_lib_dir), @locator.plugin_names, failure_tip
|
||||
end
|
||||
|
||||
def test_all_plugins_loaded_after_all
|
||||
plugin_names = ['stubby', :all, 'acts_as_chunky_bacon']
|
||||
only_load_the_following_plugins! plugin_names
|
||||
failure_tip = "It's likely someone has added a new plugin fixture without updating this list"
|
||||
assert_equal %w(stubby a plugin_with_no_lib_dir acts_as_chunky_bacon ), @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)
|
||||
|
|
Loading…
Reference in a new issue