Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
88d08f2e
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,发现更多精彩内容 >>
提交
88d08f2e
编写于
5月 20, 2014
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #15187 from v-yarotsky/fix_confusing_delegation_exception
Fix confusing exception in ActiveSupport delegation
上级
74a84777
6cc5a86a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
20 addition
and
26 deletion
+20
-26
activesupport/CHANGELOG.md
activesupport/CHANGELOG.md
+6
-0
activesupport/lib/active_support/core_ext/module/delegation.rb
...esupport/lib/active_support/core_ext/module/delegation.rb
+13
-25
activesupport/test/core_ext/module_test.rb
activesupport/test/core_ext/module_test.rb
+1
-1
未找到文件。
activesupport/CHANGELOG.md
浏览文件 @
88d08f2e
*
Fixed confusing
`DelegationError`
in
`Module#delegate`
.
See #15186.
*Vladimir Yarotsky*
*
Fixed
`ActiveSupport::Subscriber`
so that no duplicate subscriber is created
when a subscriber method is redefined.
...
...
activesupport/lib/active_support/core_ext/module/delegation.rb
浏览文件 @
88d08f2e
...
...
@@ -170,38 +170,26 @@ def delegate(*methods)
# methods still accept two arguments.
definition
=
(
method
=~
/[^\]]=$/
)
?
'arg'
:
'*args, &block'
# The following generated method
s call
the target exactly once, storing
# The following generated method
calls
the target exactly once, storing
# the returned value in a dummy variable.
#
# Reason is twofold: On one hand doing less calls is in general better.
# On the other hand it could be that the target has side-effects,
# whereas conceptually, from the user point of view, the delegator should
# be doing one call.
if
allow_nil
method_def
=
[
"def
#{
method_prefix
}#{
method
}
(
#{
definition
}
)"
,
# def customer_name(*args, &block)
"_ =
#{
to
}
"
,
# _ = client
"if !_.nil? || nil.respond_to?(:
#{
method
}
)"
,
# if !_.nil? || nil.respond_to?(:name)
" _.
#{
method
}
(
#{
definition
}
)"
,
# _.name(*args, &block)
"end"
,
# end
"end"
# end
].
join
';'
else
exception
=
%(raise DelegationError, "#{self}##{method_prefix}#{method} delegated to #{to}.#{method}, but #{to} is nil:
\#
{self.inspect}")
method_def
=
[
"def
#{
method_prefix
}#{
method
}
(
#{
definition
}
)"
,
# def customer_name(*args, &block)
" _ =
#{
to
}
"
,
# _ = client
" _.
#{
method
}
(
#{
definition
}
)"
,
# _.name(*args, &block)
"rescue NoMethodError => e"
,
# rescue NoMethodError => e
" if _.nil? && e.name == :
#{
method
}
"
,
# if _.nil? && e.name == :name
"
#{
exception
}
"
,
# # add helpful message to the exception
" else"
,
# else
" raise"
,
# raise
" end"
,
# end
"end"
# end
].
join
';'
end
exception
=
%(raise DelegationError, "#{self}##{method_prefix}#{method} delegated to #{to}.#{method}, but #{to} is nil:
\#
{self.inspect}")
method_def
=
[
"def
#{
method_prefix
}#{
method
}
(
#{
definition
}
)"
,
" _ =
#{
to
}
"
,
" if !_.nil? || nil.respond_to?(:
#{
method
}
)"
,
" _.
#{
method
}
(
#{
definition
}
)"
,
" else"
,
"
#{
exception
unless
allow_nil
}
"
,
" end"
,
"end"
].
join
';'
module_eval
(
method_def
,
file
,
line
)
end
...
...
activesupport/test/core_ext/module_test.rb
浏览文件 @
88d08f2e
...
...
@@ -72,7 +72,7 @@ def manufacturer
def
type
@type
||=
begin
nil
.
type_
name
:thing_without_same_method_name_as_delegated
.
name
end
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录