mirror of
https://github.com/github/rails.git
synced 2026-01-30 00:38:00 -05:00
Tidy up framework initialization code to ensure that it doesn't add folders to the load path that it doesn't intend to require.
Work around mongrel swallowing LoadErrors to ensure that users get more helpful errors if active_resource is required but not missing. [mislav] Closes #9743 git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7738 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -152,6 +152,9 @@ module Rails
|
||||
# ActionPack, ActionMailer, and ActiveResource) are loaded.
|
||||
def require_frameworks
|
||||
configuration.frameworks.each { |framework| require(framework.to_s) }
|
||||
rescue LoadError => e
|
||||
# re-raise because Mongrel would swallow it
|
||||
raise e.to_s
|
||||
end
|
||||
|
||||
# Add the load paths used by support functions such as the info controller
|
||||
@@ -545,16 +548,14 @@ module Rails
|
||||
end
|
||||
|
||||
def framework_paths
|
||||
# TODO: Don't include dirs for frameworks that are not used
|
||||
%w(
|
||||
railties
|
||||
railties/lib
|
||||
actionpack/lib
|
||||
activesupport/lib
|
||||
activerecord/lib
|
||||
activeresource/lib
|
||||
actionmailer/lib
|
||||
).map { |dir| "#{framework_root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
|
||||
paths = %w(railties railties/lib activesupport/lib)
|
||||
paths << 'actionpack/lib' if frameworks.include? :action_controller or frameworks.include? :action_view
|
||||
|
||||
[:active_record, :action_mailer, :active_resource, :action_web_service].each do |framework|
|
||||
paths << "#{framework.to_s.gsub('_', '')}/lib" if frameworks.include? framework
|
||||
end
|
||||
|
||||
paths.map { |dir| "#{framework_root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -82,3 +82,56 @@ class Initializer_after_initialize_with_no_block_environment_Test < Test::Unit::
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
uses_mocha 'framework paths' do
|
||||
class ConfigurationFrameworkPathsTests < Test::Unit::TestCase
|
||||
def setup
|
||||
@config = Rails::Configuration.new
|
||||
@config.frameworks.clear
|
||||
|
||||
File.stubs(:directory?).returns(true)
|
||||
@config.stubs(:framework_root_path).returns('')
|
||||
end
|
||||
|
||||
def test_minimal
|
||||
expected = %w(
|
||||
/railties
|
||||
/railties/lib
|
||||
/activesupport/lib
|
||||
)
|
||||
assert_equal expected, @config.framework_paths
|
||||
end
|
||||
|
||||
def test_actioncontroller_or_actionview_add_actionpack
|
||||
@config.frameworks << :action_controller
|
||||
assert_framework_path '/actionpack/lib'
|
||||
|
||||
@config.frameworks = [:action_view]
|
||||
assert_framework_path '/actionpack/lib'
|
||||
end
|
||||
|
||||
def test_paths_for_ar_ares_and_mailer
|
||||
[:active_record, :action_mailer, :active_resource, :action_web_service].each do |framework|
|
||||
@config.frameworks = [framework]
|
||||
assert_framework_path "/#{framework.to_s.gsub('_', '')}/lib"
|
||||
end
|
||||
end
|
||||
|
||||
def test_unknown_framework_raises_error
|
||||
@config.frameworks << :action_foo
|
||||
initializer = Rails::Initializer.new @config
|
||||
initializer.expects(:require).raises(LoadError)
|
||||
|
||||
assert_raise RuntimeError do
|
||||
initializer.send :require_frameworks
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def assert_framework_path(path)
|
||||
assert @config.framework_paths.include?(path),
|
||||
"<#{path.inspect}> not found among <#{@config.framework_paths.inspect}>"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user