aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2008-11-27 18:59:24 +0100
committerDavid Heinemeier Hansson <david@loudthinking.com>2008-11-27 18:59:24 +0100
commitf2ee056873b84f8917e72d87181e1a9f5f653342 (patch)
tree47c47835a9f34d065b85f3d1d68f9e21e78649f4 /railties/lib
parent229f959d15e451890db60dbb73f8565079977814 (diff)
downloadrails-f2ee056873b84f8917e72d87181e1a9f5f653342.tar.gz
rails-f2ee056873b84f8917e72d87181e1a9f5f653342.tar.bz2
rails-f2ee056873b84f8917e72d87181e1a9f5f653342.zip
Added view path support for engines [DHH]
Diffstat (limited to 'railties/lib')
-rw-r--r--railties/lib/initializer.rb8
-rw-r--r--railties/lib/rails/plugin.rb11
-rw-r--r--railties/lib/rails/plugin/loader.rb34
3 files changed, 32 insertions, 21 deletions
diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb
index b0abf3379c..0c06d1bf21 100644
--- a/railties/lib/initializer.rb
+++ b/railties/lib/initializer.rb
@@ -487,12 +487,8 @@ Run `rake gems:install` to install the missing gems.
def initialize_routing
return unless configuration.frameworks.include?(:action_controller)
- 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.controller_paths += configuration.controller_paths
+ ActionController::Routing::Routes.add_configuration_file(configuration.routes_configuration_file)
ActionController::Routing::Routes.reload
end
diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb
index 2b1e877e2b..4901abe808 100644
--- a/railties/lib/rails/plugin.rb
+++ b/railties/lib/rails/plugin.rb
@@ -71,6 +71,11 @@ module Rails
File.exist?(routing_file)
end
+
+ def view_path
+ File.join(directory, 'app', 'views')
+ end
+
def controller_path
File.join(directory, 'app', 'controllers')
end
@@ -95,11 +100,7 @@ module Rails
def app_paths
- [
- File.join(directory, 'app', 'models'),
- File.join(directory, 'app', 'controllers'),
- File.join(directory, 'app', 'helpers')
- ]
+ [ File.join(directory, 'app', 'models'), File.join(directory, 'app', 'helpers'), controller_path ]
end
def lib_path
diff --git a/railties/lib/rails/plugin/loader.rb b/railties/lib/rails/plugin/loader.rb
index f08d9b74e2..be81bdf4fa 100644
--- a/railties/lib/rails/plugin/loader.rb
+++ b/railties/lib/rails/plugin/loader.rb
@@ -39,6 +39,8 @@ module Rails
register_plugin_as_loaded(plugin)
end
+ configure_engines
+
ensure_all_registered_plugins_are_loaded!
end
@@ -63,19 +65,31 @@ module Rails
$LOAD_PATH.uniq!
end
- # Returns an array of all the controller paths found inside engine-type plugins.
- def controller_paths
- engines.collect(&:controller_path)
- end
-
- # Returns an array of routing.rb files from all the plugins that include config/routes.rb
- def routing_files
- plugins.select(&:routed?).collect(&:routing_file)
- end
-
protected
+ def configure_engines
+ if engines.any?
+ add_engine_routing_configurations
+ add_engine_controller_paths
+ add_engine_view_paths
+ end
+ end
+ def add_engine_routing_configurations
+ engines.select(&:routed?).collect(&:routing_file).each do |routing_file|
+ ActionController::Routing::Routes.add_configuration_file(routing_file)
+ end
+ end
+
+ def add_engine_controller_paths
+ ActionController::Routing.controller_paths += engines.collect(&:controller_path)
+ end
+
+ def add_engine_view_paths
+ # reverse it such that the last engine can overwrite view paths from the first, like with routes
+ ActionController::Base.view_paths += ActionView::PathSet.new(engines.collect(&:view_path).reverse)
+ end
+
# 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