Fixed handling of syntax errors in models that had already been succesfully...

Fixed handling of syntax errors in models that had already been succesfully required once in the current interpreter. Fixed superclass mismatch and other controller related problems by not using dependency reloading for controllers.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@482 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 ae690e8f
......@@ -9,6 +9,10 @@ module Dependencies
@@mechanism = :load
mattr_accessor :mechanism
def load?
mechanism == :load
end
def depend_on(file_name, swallow_load_errors = false)
if !loaded.include?(file_name)
loaded << file_name
......
*SVN*
* Fixed superclass mismatch and other controller related problems by not using dependency reloading for controllers. This means that controller
hierarchies need to explicitly require the superclass if its not ApplicationController. Example:
# application.rb
class ApplicationController < ActionController::Base
end
# base.rb
class BaseController < ApplicationController
end
# media_controller.rb
require_or_load 'base'
class MediaController < BaseController
end
* Fixed handling of syntax errors in models that had already been succesfully required once in the current interpreter
* Fixed that models that weren't referenced in associations weren't being reloaded in the development mode by reinstating the reload
* Fixed that generate scaffold would produce bad functional tests
......
......@@ -34,29 +34,39 @@ def dispatch(cgi = CGI.new, session_options = ActionController::CgiRequest::DEFA
controller_name, module_name = controller_name(request.parameters), module_name(request.parameters)
reload_models
require_or_load("application")
require_or_load(controller_path(controller_name, module_name))
if Dependencies.mechanism == :load
ActiveRecord::Base.reset_column_information_and_inheritable_attributes_for_all_subclasses
Dependencies.reload
end
controller_class(controller_name).process(request, response).out
rescue Object => exception
ActionController::Base.process_with_exception(request, response, exception).out
ensure
remove_class_hierarchy(controller_class(controller_name), ActionController::Base) if Dependencies.mechanism == :load
remove_controllers(controller_name)
Breakpoint.deactivate_drb if defined?(BREAKPOINT_SERVER_PORT)
end
end
private
def reload_models
if Dependencies.load?
ActiveRecord::Base.reset_column_information_and_inheritable_attributes_for_all_subclasses
Dependencies.reload
end
end
def remove_controllers(controller_name)
if Dependencies.load? && defined?(ApplicationController)
remove_class_hierarchy(controller_class(controller_name), ActionController::Base)
end
end
def controller_path(controller_name, module_name = nil)
if module_name
"#{module_name}/#{Inflector.underscore(controller_name)}_controller"
"#{module_name}/#{controller_name.underscore}_controller"
else
"#{Inflector.underscore(controller_name)}_controller"
"#{controller_name.underscore}_controller"
end
end
......@@ -65,7 +75,7 @@ def controller_class(controller_name)
end
def controller_class_name(controller_name)
"#{Inflector.camelize(controller_name)}Controller"
"#{controller_name.camelize}Controller"
end
def controller_name(parameters)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册