<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,7 @@
 *2.3.0 [Edge]*
 
+* Added app/[models|controllers|helpers] to the load path for plugins that has an app directory (go engines ;)) [DHH]
+
 * Add config.preload_frameworks to load all frameworks at startup. Default to false so Rails autoloads itself as it's used. Turn this on for Passenger and JRuby. Also turned on by config.threadsafe!  [Jeremy Kemper]
 
 * Add a rake task to generate dispatchers : rake rails:generate_dispatchers [Pratik]</diff>
      <filename>railties/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -28,13 +28,17 @@ module Rails
     end
     
     def valid?
-      File.directory?(directory) &amp;&amp; (has_lib_directory? || has_init_file?)
+      File.directory?(directory) &amp;&amp; (has_app_directory? || has_lib_directory? || has_init_file?)
     end
   
     # Returns a list of paths this plugin wishes to make available in &lt;tt&gt;$LOAD_PATH&lt;/tt&gt;.
     def load_paths
       report_nonexistant_or_empty_plugin! unless valid?
-      has_lib_directory? ? [lib_path] : []
+      
+      returning [] do |load_paths|
+        load_paths &lt;&lt; lib_path  if has_lib_directory?
+        load_paths &lt;&lt; app_paths if has_app_directory?
+      end.flatten
     end
 
     # Evaluates a plugin's init.rb file.
@@ -68,7 +72,16 @@ module Rails
 
       def report_nonexistant_or_empty_plugin!
         raise LoadError, &quot;Can not find the plugin named: #{name}&quot;
-      end      
+      end
+
+      
+      def app_paths
+        [ 
+          File.join(directory, 'app', 'models'), 
+          File.join(directory, 'app', 'controllers'),
+          File.join(directory, 'app', 'helpers')
+        ]
+      end
     
       def lib_path
         File.join(directory, 'lib')
@@ -86,6 +99,11 @@ module Rails
         File.file?(gem_init_path) ? gem_init_path : classic_init_path
       end
 
+
+      def has_app_directory?
+        File.directory?(File.join(directory, 'app'))
+      end
+
       def has_lib_directory?
         File.directory?(lib_path)
       end
@@ -94,6 +112,7 @@ module Rails
         File.file?(init_path)
       end
 
+
       def evaluate_init_rb(initializer)
         if has_init_file?
           silence_warnings do</diff>
      <filename>railties/lib/rails/plugin.rb</filename>
    </modified>
    <modified>
      <diff>@@ -33,6 +33,7 @@ module Rails
           plugin.load(initializer)
           register_plugin_as_loaded(plugin)
         end
+
         ensure_all_registered_plugins_are_loaded!
       end
       
@@ -45,12 +46,15 @@ module Rails
         plugins.each do |plugin|
           plugin.load_paths.each do |path|
             $LOAD_PATH.insert(application_lib_index + 1, path)
-            ActiveSupport::Dependencies.load_paths      &lt;&lt; path
+
+            ActiveSupport::Dependencies.load_paths &lt;&lt; path
+
             unless Rails.configuration.reload_plugins?
               ActiveSupport::Dependencies.load_once_paths &lt;&lt; path
             end
           end
         end
+
         $LOAD_PATH.uniq!
       end      
       
@@ -59,9 +63,9 @@ module Rails
         # The locate_plugins method uses each class in config.plugin_locators to
         # find the set of all plugins available to this Rails application.
         def locate_plugins
-          configuration.plugin_locators.map { |locator|
+          configuration.plugin_locators.map do |locator|
             locator.new(initializer).plugins
-          }.flatten
+          end.flatten
           # TODO: sorting based on config.plugins
         end
 </diff>
      <filename>railties/lib/rails/plugin/loader.rb</filename>
    </modified>
    <modified>
      <diff>@@ -209,7 +209,7 @@ uses_mocha &quot;Initializer plugin loading tests&quot; do
     def test_all_plugins_are_loaded_when_registered_plugin_list_is_untouched
       failure_tip = &quot;It's likely someone has added a new plugin fixture without updating this list&quot;
       load_plugins!
-      assert_plugins [:a, :acts_as_chunky_bacon, :gemlike, :plugin_with_no_lib_dir, :stubby], @initializer.loaded_plugins, failure_tip
+      assert_plugins [:a, :acts_as_chunky_bacon, :engine, :gemlike, :plugin_with_no_lib_dir, :stubby], @initializer.loaded_plugins, failure_tip
     end
 
     def test_all_plugins_loaded_when_all_is_used
@@ -217,7 +217,7 @@ uses_mocha &quot;Initializer plugin loading tests&quot; do
       only_load_the_following_plugins! plugin_names
       load_plugins!
       failure_tip = &quot;It's likely someone has added a new plugin fixture without updating this list&quot;
-      assert_plugins [:stubby, :acts_as_chunky_bacon, :a, :gemlike, :plugin_with_no_lib_dir], @initializer.loaded_plugins, failure_tip
+      assert_plugins [:stubby, :acts_as_chunky_bacon, :a, :engine, :gemlike, :plugin_with_no_lib_dir], @initializer.loaded_plugins, failure_tip
     end
 
     def test_all_plugins_loaded_after_all
@@ -225,7 +225,7 @@ uses_mocha &quot;Initializer plugin loading tests&quot; do
       only_load_the_following_plugins! plugin_names
       load_plugins!
       failure_tip = &quot;It's likely someone has added a new plugin fixture without updating this list&quot;
-      assert_plugins [:stubby, :a, :gemlike, :plugin_with_no_lib_dir, :acts_as_chunky_bacon], @initializer.loaded_plugins, failure_tip
+      assert_plugins [:stubby, :a, :engine, :gemlike, :plugin_with_no_lib_dir, :acts_as_chunky_bacon], @initializer.loaded_plugins, failure_tip
     end
 
     def test_plugin_names_may_be_strings
@@ -299,7 +299,7 @@ uses_mocha 'i18n settings' do
        File.expand_path(&quot;./test/../../activesupport/lib/active_support/locale/en.yml&quot;),
        File.expand_path(&quot;./test/../../actionpack/lib/action_view/locale/en.yml&quot;),
        &quot;my/test/locale.yml&quot;,
-       &quot;my/other/locale.yml&quot; ], I18n.load_path
+       &quot;my/other/locale.yml&quot; ], I18n.load_path.collect { |path| path =~ /^\./ ? File.expand_path(path) : path }
     end
     
     def test_setting_another_default_locale</diff>
      <filename>railties/test/initializer_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -48,16 +48,16 @@ uses_mocha &quot;Plugin Loader Tests&quot; do
     end
 
     def test_should_find_all_availble_plugins_and_return_as_all_plugins
-      assert_plugins [:stubby, :plugin_with_no_lib_dir, :gemlike, :acts_as_chunky_bacon, :a], @loader.all_plugins.reverse, @failure_tip
+      assert_plugins [ :engine, :stubby, :plugin_with_no_lib_dir, :gemlike, :acts_as_chunky_bacon, :a], @loader.all_plugins.reverse, @failure_tip
     end
 
     def test_should_return_all_plugins_as_plugins_when_registered_plugin_list_is_untouched
-      assert_plugins [:a, :acts_as_chunky_bacon, :gemlike, :plugin_with_no_lib_dir, :stubby], @loader.plugins, @failure_tip
+      assert_plugins [:a, :acts_as_chunky_bacon, :engine, :gemlike, :plugin_with_no_lib_dir, :stubby], @loader.plugins, @failure_tip
     end
 
     def test_should_return_all_plugins_as_plugins_when_registered_plugin_list_is_nil
       @configuration.plugins = nil
-      assert_plugins [:a, :acts_as_chunky_bacon, :gemlike, :plugin_with_no_lib_dir, :stubby], @loader.plugins, @failure_tip
+      assert_plugins [:a, :acts_as_chunky_bacon, :engine, :gemlike, :plugin_with_no_lib_dir, :stubby], @loader.plugins, @failure_tip
     end
 
     def test_should_return_specific_plugins_named_in_config_plugins_array_if_set
@@ -74,17 +74,17 @@ uses_mocha &quot;Plugin Loader Tests&quot; do
 
     def test_should_load_all_plugins_in_natural_order_when_all_is_used
       only_load_the_following_plugins! [:all]
-      assert_plugins [:a, :acts_as_chunky_bacon, :gemlike, :plugin_with_no_lib_dir, :stubby], @loader.plugins, @failure_tip
+      assert_plugins [:a, :acts_as_chunky_bacon, :engine, :gemlike, :plugin_with_no_lib_dir, :stubby], @loader.plugins, @failure_tip
     end
 
     def test_should_load_specified_plugins_in_order_and_then_all_remaining_plugins_when_all_is_used
       only_load_the_following_plugins! [:stubby, :acts_as_chunky_bacon, :all]
-      assert_plugins [:stubby, :acts_as_chunky_bacon, :a, :gemlike, :plugin_with_no_lib_dir], @loader.plugins, @failure_tip
+      assert_plugins [:stubby, :acts_as_chunky_bacon, :a, :engine, :gemlike, :plugin_with_no_lib_dir], @loader.plugins, @failure_tip
     end
 
     def test_should_be_able_to_specify_loading_of_plugins_loaded_after_all
       only_load_the_following_plugins!  [:stubby, :all, :acts_as_chunky_bacon]
-      assert_plugins [:stubby, :a, :gemlike, :plugin_with_no_lib_dir, :acts_as_chunky_bacon], @loader.plugins, @failure_tip
+      assert_plugins [:stubby, :a, :engine, :gemlike, :plugin_with_no_lib_dir, :acts_as_chunky_bacon], @loader.plugins, @failure_tip
     end
 
     def test_should_accept_plugin_names_given_as_strings
@@ -112,6 +112,19 @@ uses_mocha &quot;Plugin Loader Tests&quot; do
       assert ActiveSupport::Dependencies.load_paths.include?(File.join(plugin_fixture_path('default/acts/acts_as_chunky_bacon'), 'lib'))
     end
 
+
+    def test_should_add_engine_load_paths_to_Dependencies_load_paths
+      only_load_the_following_plugins! [:engine]
+
+      @loader.add_plugin_load_paths
+
+      %w( models controllers helpers ).each do |app_part|
+        assert ActiveSupport::Dependencies.load_paths.include?(
+          File.join(plugin_fixture_path('engines/engine'), 'app', app_part)
+        ), &quot;Couldn't find #{app_part} in load path&quot;
+      end
+    end
+
     def test_should_add_plugin_load_paths_to_Dependencies_load_once_paths
       only_load_the_following_plugins! [:stubby, :acts_as_chunky_bacon]
 </diff>
      <filename>railties/test/plugin_loader_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>133c349b0af1c46d26f83c19e6b583062db931e4</id>
    </parent>
  </parents>
  <author>
    <name>David Heinemeier Hansson</name>
    <login>dhh</login>
    <email>david@loudthinking.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/63d8f56774dcb1ea601928c3eb6c119d359fae10</url>
  <id>63d8f56774dcb1ea601928c3eb6c119d359fae10</id>
  <committed-date>2008-11-26T05:41:20-08:00</committed-date>
  <authored-date>2008-11-26T05:41:20-08:00</authored-date>
  <message>Added app/[models|controllers|helpers] to the load path for plugins that has an app directory (go engines ;)) [DHH]</message>
  <tree>599aa9a3307d3f3516d051532c768724b967114b</tree>
  <committer>
    <name>David Heinemeier Hansson</name>
    <login>dhh</login>
    <email>david@loudthinking.com</email>
  </committer>
</commit>
