Changeset 5738
- Timestamp:
- 12/18/06 20:27:05 (3 years ago)
- Files:
-
- trunk/railties/CHANGELOG (modified) (1 diff)
- trunk/railties/lib/initializer.rb (modified) (7 diffs)
- trunk/railties/test/plugin_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/railties/CHANGELOG
r5722 r5738 1 1 *SVN* 2 3 * Make config.plugins affect the load path and the dependencies system. Allows you to control plugin loading order, and keep disabled plugins off the load path. [James Adam] 2 4 3 5 * Don't generate a components directory in new Rails apps. [Jeremy Kemper] trunk/railties/lib/initializer.rb
r5722 r5738 49 49 def initialize(configuration) 50 50 @configuration = configuration 51 @loaded_plugins = Set.new51 @loaded_plugins = [] 52 52 end 53 53 … … 177 177 # 178 178 # After all plugins are loaded, duplicates are removed from the load path. 179 # Plugins are loaded in alphabetical order. 179 # If an array of plugin names is specified in config.plugins, the plugins 180 # will be loaded in that order. Otherwise, plugins are loaded in alphabetical 181 # order. 180 182 def load_plugins 181 find_plugins(configuration.plugin_paths).sort.each { |path| load_plugin path } 183 if configuration.plugins.nil? 184 # a nil value implies we don't care about plugins; load 'em all in a reliable order 185 find_plugins(configuration.plugin_paths).sort.each { |path| load_plugin path } 186 elsif !configuration.plugins.empty? 187 # we've specified a config.plugins array, so respect that order 188 plugin_paths = find_plugins(configuration.plugin_paths) 189 configuration.plugins.each do |name| 190 path = plugin_paths.find { |p| File.basename(p) == name } 191 raise(LoadError, "Cannot find the plugin '#{name}'!") if path.nil? 192 load_plugin path 193 end 194 end 182 195 $LOAD_PATH.uniq! 183 196 end … … 346 359 347 360 def plugin_enabled?(path) 348 configuration.plugins. empty? || configuration.plugins.include?(File.basename(path))361 configuration.plugins.nil? || configuration.plugins.include?(File.basename(path)) 349 362 end 350 363 … … 375 388 application_lib_index = $LOAD_PATH.index(File.join(RAILS_ROOT, "lib")) || 0 376 389 $LOAD_PATH.insert(application_lib_index + 1, lib_path) 390 Dependencies.load_paths << lib_path 377 391 end 378 392 … … 471 485 attr_accessor :whiny_nils 472 486 473 # The list of plugins to load. If this is set to <tt>[]</tt>, all plugins will be loaded. 487 # The list of plugins to load. If this is set to <tt>nil</tt>, all plugins will 488 # be loaded. If this is set to <tt>[]</tt>, no plugins will be loaded. Otherwise, 489 # plugins will be loaded in the order specified. 474 490 attr_accessor :plugins 475 491 … … 593 609 ).map { |dir| "#{root_path}/#{dir}" }.select { |dir| File.directory?(dir) } 594 610 595 paths.concat Dir["#{root_path}/vendor/plugins/*/lib/"]596 611 paths.concat builtin_directories 597 612 end … … 643 658 644 659 def default_plugins 645 []660 nil 646 661 end 647 662 trunk/railties/test/plugin_test.rb
r5722 r5738 44 44 def test_load_plugin 45 45 stubby = "#{File.dirname(__FILE__)}/fixtures/plugins/default/stubby" 46 expected = Set.new(['stubby'])46 expected = ['stubby'] 47 47 48 48 assert @init.send(:load_plugin, stubby) … … 67 67 assert_loaded_plugins %w(a stubby acts_as_chunky_bacon), ['default', 'alternate'] 68 68 end 69 70 def test_load_all_plugins_when_config_plugins_is_nil 71 @init.configuration.plugins = nil 72 assert_loaded_plugins %w(a stubby acts_as_chunky_bacon), ['default', 'alternate'] 73 end 69 74 75 def test_load_no_plugins_when_config_plugins_is_empty_array 76 @init.configuration.plugins = [] 77 assert_loaded_plugins [], ['default', 'alternate'] 78 end 79 80 def test_load_only_selected_plugins 81 plugins = %w(stubby a) 82 @init.configuration.plugins = plugins 83 assert_loaded_plugins plugins, ['default', 'alternate'] 84 end 85 86 def test_load_plugins_in_order 87 plugins = %w(stubby acts_as_chunky_bacon a) 88 @init.configuration.plugins = plugins 89 assert_plugin_load_order plugins, ['default', 'alternate'] 90 end 91 92 def test_raise_error_when_plugin_not_found 93 @init.configuration.plugins = %w(this_plugin_does_not_exist) 94 assert_raise(LoadError) { load_plugins(['default', 'alternate']) } 95 end 96 70 97 protected 71 def assert_loaded_plugins(plugins, path) 72 assert_equal Set.new(plugins), load_plugins(path) 98 def assert_loaded_plugins(plugins, paths) 99 assert_equal plugins.sort, load_plugins(paths).sort 100 end 101 102 def assert_plugin_load_order(plugins, paths) 103 assert_equal plugins, load_plugins(paths) 73 104 end 74 105