Ensure helpers work from configured path.

This commit is contained in:
José Valim
2010-01-24 12:04:37 +01:00
parent e0bdc4f446
commit 37e4deb260
4 changed files with 12 additions and 11 deletions

View File

@@ -7,7 +7,6 @@ module ActionController
include AbstractController::Translation
include ActionController::Helpers
helper :all # By default, all helpers should be included
include ActionController::HideActions
include ActionController::UrlFor
@@ -67,6 +66,7 @@ module ActionController
def self.inherited(klass)
::ActionController::Base.subclasses << klass.to_s
super
klass.helper :all
end
def self.subclasses

View File

@@ -50,11 +50,8 @@ module ActionController
include AbstractController::Helpers
included do
# Set the default directory for helpers
# TODO This should support multiple directories in order
# to work with engines
extlib_inheritable_accessor(:helpers_dir) do
defined?(Rails.root) ? "#{Rails.root}/app/helpers" : "app/helpers"
extlib_inheritable_accessor(:helpers_path) do
defined?(Rails::Application) ? Rails::Application.paths.app.helpers.to_a : []
end
end
@@ -107,10 +104,15 @@ module ActionController
raise e unless e.missing_name? "#{module_name}Helper"
end
# Extract helper names from files in app/helpers/**/*.rb
# Extract helper names from files in app/helpers/**/*_helper.rb
def all_application_helpers
extract = /^#{Regexp.quote(helpers_dir)}\/?(.*)_helper.rb$/
Dir["#{helpers_dir}/**/*_helper.rb"].map { |file| file.sub extract, '\1' }
helpers = []
helpers_path.each do |path|
extract = /^#{Regexp.quote(path)}\/?(.*)_helper.rb$/
helpers += Dir["#{path}/**/*_helper.rb"].map { |file| file.sub(extract, '\1') }
end
helpers.uniq!
helpers
end
end
end

View File

@@ -11,8 +11,6 @@ module Rails
autoload :Railties, 'rails/application/railties'
autoload :RoutesReloader, 'rails/application/routes_reloader'
# TODO Check helpers works as expected
# TODO Check routes namespaces
# TODO Ensure production settings are read properly
class << self
private :new

View File

@@ -15,6 +15,7 @@ module Rails
paths = Rails::Paths::Root.new(@root)
paths.app "app", :eager_load => true, :glob => "*"
paths.app.controllers "app/controllers", :eager_load => true
paths.app.helpers "app/helpers", :eager_load => true
paths.app.metals "app/metal", :eager_load => true
paths.app.views "app/views"
paths.lib "lib", :load_path => true