<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>railties/test/fixtures/plugins/engines/engine/app/controllers/engine_controller.rb</filename>
    </added>
    <added>
      <filename>railties/test/fixtures/plugins/engines/engine/app/models/engine_model.rb</filename>
    </added>
    <added>
      <filename>railties/test/fixtures/plugins/engines/engine/config/routes.rb</filename>
    </added>
    <added>
      <filename>railties/test/fixtures/plugins/engines/engine/init.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,7 @@
 *2.3.0 [Edge]*
 
+* Added that config/routes.rb files in engine plugins are automatically loaded (and reloaded when they change in dev mode) [DHH]
+
 * 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]</diff>
      <filename>railties/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -486,8 +486,13 @@ Run `rake gems:install` to install the missing gems.
     # loading module used to lazily load controllers (Configuration#controller_paths).
     def initialize_routing
       return unless configuration.frameworks.include?(:action_controller)
-      ActionController::Routing.controller_paths = configuration.controller_paths
-      ActionController::Routing::Routes.configuration_file = configuration.routes_configuration_file
+
+      ActionController::Routing.controller_paths = configuration.controller_paths + plugin_loader.controller_paths
+
+      ([ configuration.routes_configuration_file ] + plugin_loader.routing_files).each do |routing_file|
+        ActionController::Routing::Routes.add_configuration_file(routing_file)
+      end
+
       ActionController::Routing::Routes.reload
     end
 </diff>
      <filename>railties/lib/initializer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -40,7 +40,7 @@ module Rails
         load_paths &lt;&lt; app_paths if has_app_directory?
       end.flatten
     end
-
+    
     # Evaluates a plugin's init.rb file.
     def load(initializer)
       return if loaded?
@@ -60,7 +60,26 @@ module Rails
     def about
       @about ||= load_about_information
     end
+
+    # Engines are plugins with an app/ directory.
+    def engine?
+      has_app_directory?
+    end
     
+    # Returns true if the engine ships with a routing file
+    def routed?
+      File.exist?(routing_file)
+    end
+
+    def controller_path
+      File.join(directory, 'app', 'controllers')
+    end
+
+    def routing_file
+      File.join(directory, 'config', 'routes.rb')
+    end
+    
+
     private
       def load_about_information
         about_yml_path = File.join(@directory, &quot;about.yml&quot;)
@@ -82,7 +101,7 @@ module Rails
           File.join(directory, 'app', 'helpers')
         ]
       end
-    
+      
       def lib_path
         File.join(directory, 'lib')
       end</diff>
      <filename>railties/lib/rails/plugin.rb</filename>
    </modified>
    <modified>
      <diff>@@ -22,6 +22,11 @@ module Rails
         @plugins ||= all_plugins.select { |plugin| should_load?(plugin) }.sort { |p1, p2| order_plugins(p1, p2) }
       end
 
+      # Returns the plugins that are in engine-form (have an app/ directory)
+      def engines
+        @engines ||= plugins.select(&amp;:engine?)
+      end
+
       # Returns all the plugins that could be found by the current locators.
       def all_plugins
         @all_plugins ||= locate_plugins
@@ -56,7 +61,17 @@ module Rails
         end
 
         $LOAD_PATH.uniq!
-      end      
+      end
+      
+      # Returns an array of all the controller paths found inside engine-type plugins.
+      def controller_paths
+        engines.collect(&amp;:controller_path)
+      end
+      
+      def routing_files
+        engines.select(&amp;:routed?).collect(&amp;:routing_file)
+      end
+      
       
       protected
       </diff>
      <filename>railties/lib/rails/plugin/loader.rb</filename>
    </modified>
    <modified>
      <diff>@@ -252,6 +252,7 @@ uses_mocha &quot;Initializer plugin loading tests&quot; do
       assert $LOAD_PATH.include?(File.join(plugin_fixture_path('default/acts/acts_as_chunky_bacon'), 'lib'))
     end
 
+
     private
 
       def load_plugins!</diff>
      <filename>railties/test/initializer_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -47,7 +47,7 @@ uses_mocha &quot;Plugin Locator Tests&quot; do
     end
   
     def test_should_return_all_plugins_found_under_the_set_plugin_paths
-      assert_equal [&quot;a&quot;, &quot;acts_as_chunky_bacon&quot;, &quot;gemlike&quot;, &quot;plugin_with_no_lib_dir&quot;, &quot;stubby&quot;].sort, @locator.plugins.map(&amp;:name).sort
+      assert_equal [&quot;a&quot;, &quot;acts_as_chunky_bacon&quot;, &quot;engine&quot;, &quot;gemlike&quot;, &quot;plugin_with_no_lib_dir&quot;, &quot;stubby&quot;].sort, @locator.plugins.map(&amp;:name).sort
     end
   
     def test_should_find_plugins_only_under_the_plugin_paths_set_in_configuration</diff>
      <filename>railties/test/plugin_locator_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>40b40c487040d9c721d486e8ec8cfbc53a8cd79a</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/4999d52e08a02ebba344f6c318f0af4b5b18f0e5</url>
  <id>4999d52e08a02ebba344f6c318f0af4b5b18f0e5</id>
  <committed-date>2008-11-26T11:03:25-08:00</committed-date>
  <authored-date>2008-11-26T11:03:25-08:00</authored-date>
  <message>Added that config/routes.rb files in engine plugins are automatically loaded (and reloaded when they change in dev mode) [DHH]</message>
  <tree>f0d2af329fb961b6619ee5f2c21666168f8bb321</tree>
  <committer>
    <name>David Heinemeier Hansson</name>
    <login>dhh</login>
    <email>david@loudthinking.com</email>
  </committer>
</commit>
