Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
a01665af
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a01665af
编写于
7月 25, 2019
作者:
X
Xavier Noria
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
let autoloaded? support modules with overridden names [closes #36757]
上级
f4be556e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
30 addition
and
3 deletion
+30
-3
activesupport/lib/active_support/dependencies.rb
activesupport/lib/active_support/dependencies.rb
+13
-2
activesupport/lib/active_support/dependencies/zeitwerk_integration.rb
...t/lib/active_support/dependencies/zeitwerk_integration.rb
+1
-1
activesupport/test/dependencies_test.rb
activesupport/test/dependencies_test.rb
+7
-0
railties/test/application/zeitwerk_integration_test.rb
railties/test/application/zeitwerk_integration_test.rb
+9
-0
未找到文件。
activesupport/lib/active_support/dependencies.rb
浏览文件 @
a01665af
...
...
@@ -20,6 +20,9 @@ module ActiveSupport #:nodoc:
module
Dependencies
#:nodoc:
extend
self
UNBOUND_METHOD_MODULE_NAME
=
Module
.
instance_method
(
:name
)
private_constant
:UNBOUND_METHOD_MODULE_NAME
mattr_accessor
:interlock
,
default:
Interlock
.
new
# :doc:
...
...
@@ -659,7 +662,7 @@ def safe_constantize(name)
# Determine if the given constant has been automatically loaded.
def
autoloaded?
(
desc
)
return
false
if
desc
.
is_a?
(
Module
)
&&
desc
.
anonymous
?
return
false
if
desc
.
is_a?
(
Module
)
&&
real_mod_name
(
desc
).
nil
?
name
=
to_constant_name
desc
return
false
unless
qualified_const_defined?
(
name
)
autoloaded_constants
.
include?
(
name
)
...
...
@@ -715,7 +718,7 @@ def to_constant_name(desc) #:nodoc:
when
String
then
desc
.
sub
(
/^::/
,
""
)
when
Symbol
then
desc
.
to_s
when
Module
desc
.
name
||
real_mod_name
(
desc
)
||
raise
(
ArgumentError
,
"Anonymous modules have no name to be referenced by"
)
else
raise
TypeError
,
"Not a valid constant descriptor:
#{
desc
.
inspect
}
"
end
...
...
@@ -789,6 +792,14 @@ def remove_constant(const) #:nodoc:
def
log
(
message
)
logger
.
debug
(
"autoloading:
#{
message
}
"
)
if
logger
&&
verbose
end
private
# Returns the original name of a class or module even if `name` has been
# overridden.
def
real_mod_name
(
mod
)
UNBOUND_METHOD_MODULE_NAME
.
bind
(
mod
).
call
end
end
end
...
...
activesupport/lib/active_support/dependencies/zeitwerk_integration.rb
浏览文件 @
a01665af
...
...
@@ -28,7 +28,7 @@ def autoloaded_constants
end
def
autoloaded?
(
object
)
cpath
=
object
.
is_a?
(
Module
)
?
object
.
name
:
object
.
to_s
cpath
=
object
.
is_a?
(
Module
)
?
real_mod_name
(
object
)
:
object
.
to_s
Rails
.
autoloaders
.
main
.
unloadable_cpath?
(
cpath
)
end
...
...
activesupport/test/dependencies_test.rb
浏览文件 @
a01665af
...
...
@@ -592,6 +592,13 @@ def test_autoloaded?
nil_name
=
Module
.
new
def
nil_name
.
name
()
nil
end
assert_not
ActiveSupport
::
Dependencies
.
autoloaded?
(
nil_name
)
invalid_constant_name
=
Module
.
new
do
def
self
.
name
"primary::SchemaMigration"
end
end
assert_not
ActiveSupport
::
Dependencies
.
autoloaded?
(
invalid_constant_name
)
end
ensure
remove_constants
(
:ModuleFolder
)
...
...
railties/test/application/zeitwerk_integration_test.rb
浏览文件 @
a01665af
...
...
@@ -98,6 +98,15 @@ class RESTfulController < ApplicationController
assert_nil
deps
.
safe_constantize
(
"Admin"
)
end
test
"autoloaded? and overridden class names"
do
invalid_constant_name
=
Module
.
new
do
def
self
.
name
"primary::SchemaMigration"
end
end
assert_not
deps
.
autoloaded?
(
invalid_constant_name
)
end
test
"unloadable constants (main)"
do
app_file
"app/models/user.rb"
,
"class User; end"
app_file
"app/models/post.rb"
,
"class Post; end"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录