From e35c2043b135a95104e3eeb3e12cbcde541fa1b4 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Mon, 23 Aug 2010 19:25:04 +0200 Subject: Include all helpers from non-namespaced engines --- railties/lib/rails/engine.rb | 18 ++++++++++++++++-- railties/lib/rails/engine/configuration.rb | 1 + railties/test/railties/engine_test.rb | 19 ++++++++++++++++++- 3 files changed, 35 insertions(+), 3 deletions(-) (limited to 'railties') diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb index 3d4bbca5d7..bc3014adaa 100644 --- a/railties/lib/rails/engine.rb +++ b/railties/lib/rails/engine.rb @@ -242,7 +242,7 @@ module Rails autoload :Configuration, "rails/engine/configuration" class << self - attr_accessor :called_from + attr_accessor :called_from, :namespaced alias :engine_name :railtie_name def inherited(base) @@ -292,11 +292,17 @@ module Rails "#{name}_" end end + + self.namespaced = true + end + + def namespaced? + !!namespaced end end delegate :middleware, :root, :paths, :to => :config - delegate :engine_name, :to => "self.class" + delegate :engine_name, :namespaced?, :to => "self.class" def load_tasks super @@ -435,6 +441,14 @@ module Rails config.static_asset_paths[config.compiled_asset_path] = public_path end end + + initializer :prepend_helpers_path do + unless namespaced? + config.helpers_paths = [] unless config.respond_to?(:helpers_paths) + config.helpers_paths = config.paths.app.helpers.to_a + config.helpers_paths + end + end + protected def find_root_with_flag(flag, default=nil) root_path = self.class.called_from diff --git a/railties/lib/rails/engine/configuration.rb b/railties/lib/rails/engine/configuration.rb index bce1cd6580..3ac8911ba8 100644 --- a/railties/lib/rails/engine/configuration.rb +++ b/railties/lib/rails/engine/configuration.rb @@ -11,6 +11,7 @@ module Rails super() @root = root @middleware = Rails::Configuration::MiddlewareStackProxy.new + @helpers_paths = [] end def paths diff --git a/railties/test/railties/engine_test.rb b/railties/test/railties/engine_test.rb index fff925404d..6deca9cf1e 100644 --- a/railties/test/railties/engine_test.rb +++ b/railties/test/railties/engine_test.rb @@ -304,11 +304,12 @@ module RailtiesTest assert_equal response[2].path, File.join(app_path, "public/bukkits/file_from_app.html") end - test "shared engine should include application's helpers" do + test "shared engine should include application's helpers and own helpers" do app_file "config/routes.rb", <<-RUBY AppTemplate::Application.routes.draw do match "/foo" => "bukkits/foo#index", :as => "foo" match "/foo/show" => "bukkits/foo#show" + match "/foo/bar" => "bukkits/foo#bar" end RUBY @@ -320,6 +321,14 @@ module RailtiesTest end RUBY + @plugin.write "app/helpers/bar_helper.rb", <<-RUBY + module BarHelper + def bar + "It's a bar." + end + end + RUBY + @plugin.write "app/controllers/bukkits/foo_controller.rb", <<-RUBY class Bukkits::FooController < ActionController::Base def index @@ -329,6 +338,10 @@ module RailtiesTest def show render :text => foo_path end + + def bar + render :inline => "<%= bar %>" + end end RUBY @@ -341,6 +354,10 @@ module RailtiesTest env = Rack::MockRequest.env_for("/foo/show") response = Rails.application.call(env) assert_equal "/foo", response[2].body + + env = Rack::MockRequest.env_for("/foo/bar") + response = Rails.application.call(env) + assert_equal "It's a bar.", response[2].body end test "namespaced engine should include only its own routes and helpers" do -- cgit v1.2.3