Add lib to load paths when application is inherited to be able to load lib code during configuration.

This commit is contained in:
José Valim 2010-06-02 00:42:20 +02:00
parent cae2519900
commit 5a0d73f17c
3 changed files with 29 additions and 1 deletions

View File

@ -67,6 +67,7 @@ module Rails
raise "You cannot have more than one Rails::Application" if Rails.application
super
Rails.application = base.instance
Rails.application.add_lib_to_load_paths!
ActiveSupport.run_load_hooks(:before_configuration, base.instance)
end
@ -83,11 +84,21 @@ module Rails
delegate :middleware, :to => :config
def add_lib_to_load_paths!
path = config.root.join('lib').to_s
$LOAD_PATH.unshift(path) if File.exists?(path)
end
def require_environment!
environment = paths.config.environment.to_a.first
require environment if environment
end
def eager_load!
railties.all(&:eager_load!)
super
end
def routes
@routes ||= ActionDispatch::Routing::RouteSet.new
end

View File

@ -38,7 +38,7 @@ module Rails
initializer :eager_load! do
if config.cache_classes && !$rails_rake_task
ActiveSupport.run_load_hooks(:before_eager_load, self)
railties.all(&:eager_load!)
eager_load!
end
end

View File

@ -19,6 +19,23 @@ module ApplicationTests
assert $:.include?("#{app_path}/app/models")
end
test "initializing an application adds lib path on inheritance hook" do
app_file "lib/foo.rb", <<-RUBY
module Foo; end
RUBY
add_to_config <<-RUBY
require "foo"
raise "Expected Foo to be defined" unless defined?(Foo)
RUBY
assert_nothing_raised do
require "#{app_path}/config/environment"
end
assert $:.include?("#{app_path}/lib")
end
test "initializing an application eager load any path under app" do
app_file "app/anything/foo.rb", <<-RUBY
module Foo; end