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 ...@@ -9,6 +9,10 @@ module Dependencies
@@mechanism = :load @@mechanism = :load
mattr_accessor :mechanism mattr_accessor :mechanism
def load?
mechanism == :load
end
def depend_on(file_name, swallow_load_errors = false) def depend_on(file_name, swallow_load_errors = false)
if !loaded.include?(file_name) if !loaded.include?(file_name)
loaded << file_name loaded << file_name
......
*SVN* *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 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 * Fixed that generate scaffold would produce bad functional tests
......
...@@ -34,29 +34,39 @@ def dispatch(cgi = CGI.new, session_options = ActionController::CgiRequest::DEFA ...@@ -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) controller_name, module_name = controller_name(request.parameters), module_name(request.parameters)
reload_models
require_or_load("application") require_or_load("application")
require_or_load(controller_path(controller_name, module_name)) 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 controller_class(controller_name).process(request, response).out
rescue Object => exception rescue Object => exception
ActionController::Base.process_with_exception(request, response, exception).out ActionController::Base.process_with_exception(request, response, exception).out
ensure 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) Breakpoint.deactivate_drb if defined?(BREAKPOINT_SERVER_PORT)
end end
end end
private 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) def controller_path(controller_name, module_name = nil)
if module_name if module_name
"#{module_name}/#{Inflector.underscore(controller_name)}_controller" "#{module_name}/#{controller_name.underscore}_controller"
else else
"#{Inflector.underscore(controller_name)}_controller" "#{controller_name.underscore}_controller"
end end
end end
...@@ -65,7 +75,7 @@ def controller_class(controller_name) ...@@ -65,7 +75,7 @@ def controller_class(controller_name)
end end
def controller_class_name(controller_name) def controller_class_name(controller_name)
"#{Inflector.camelize(controller_name)}Controller" "#{controller_name.camelize}Controller"
end end
def controller_name(parameters) def controller_name(parameters)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册