Fix request.path_info and clear up LoadingModule behavior #754 [Nicholas Seckar]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@817 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 a29625fc
......@@ -78,7 +78,7 @@ def request_uri
end
def path_info
env['PATH_INFO']
(/^(.*)\.html$/ =~ env['PATH_INFO']) ? $1 : env['PATH_INFO']
end
def protocol
......
......@@ -58,6 +58,11 @@ def test_path_info
@request.env["PATH_INFO"] = "/path/of/some/uri"
assert_equal "/path/of/some/uri", @request.path_info
assert_equal "/path/of/some/uri", @request.path
# PATH_INFO actually has a .html suffix on many servers. But we don't want Rails to see the .html part.
@request.env["PATH_INFO"] = "/path/of/some/uri.html"
assert_equal "/path/of/some/uri", @request.path_info
assert_equal "/path/of/some/uri", @request.path
end
def test_host_with_port
......
......@@ -36,7 +36,8 @@ def clear
end
def require_or_load(file_name)
load? ? load("#{file_name}.rb") : require(file_name)
file_name = "#{file_name}.rb" unless ! load? || /\.rb$/ =~ file_name
load? ? load(file_name) : require(file_name)
end
def remove_subclasses_for(*classes)
......@@ -62,6 +63,7 @@ def initialize(root, path=[])
@root = root
end
def root?() self.root == self end
def load_paths() self.root.load_paths end
# Load missing constants if possible.
......@@ -78,10 +80,19 @@ def const_load!(name, file_name = nil)
next unless fs_path
if File.directory?(fs_path)
self.const_set name, LoadingModule.new(self.root, self.path + [name])
new_module = LoadingModule.new(self.root, self.path + [name])
self.const_set name, new_module
if self.root?
raise NameError, "Cannot load controller module named #{name}: An object of type #{Object.const_get(name).class.to_s} already exists." \
if Object.const_defined?(name)
Object.const_set(name, new_module)
end
break
elsif File.file?(fs_path)
self.root.load_file!(fs_path)
# Import the loaded constant from Object provided we are the root node.
self.const_set(name, Object.const_get(name)) if self.root? && Object.const_defined?(name)
break
end
end
......@@ -109,17 +120,13 @@ def path() [] end
# Load the source file at the given file path
def load_file!(file_path)
begin root.module_eval(IO.read(file_path), file_path, 1)
rescue Object => exception
exception.blame_file! file_path
raise
end
require_dependency(file_path)
end
# Erase all items in this module
def clear!
constants.each do |name|
Object.send(:remove_const, name) if Object.const_defined?(name) && self.path.empty?
Object.send(:remove_const, name) if Object.const_defined?(name)
self.send(:remove_const, name)
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册