Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
a21b5771
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,发现更多精彩内容 >>
提交
a21b5771
编写于
1月 17, 2012
作者:
B
Bogdan Gusiev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
AS::Callbacks: Refactor :per_key option
上级
5f8274ef
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
7 addition
and
35 deletion
+7
-35
activesupport/lib/active_support/callbacks.rb
activesupport/lib/active_support/callbacks.rb
+7
-35
未找到文件。
activesupport/lib/active_support/callbacks.rb
浏览文件 @
a21b5771
...
@@ -91,29 +91,23 @@ def halted_callback_hook(filter)
...
@@ -91,29 +91,23 @@ def halted_callback_hook(filter)
class
Callback
#:nodoc:#
class
Callback
#:nodoc:#
@@_callback_sequence
=
0
@@_callback_sequence
=
0
attr_accessor
:chain
,
:filter
,
:kind
,
:options
,
:
per_key
,
:
klass
,
:raw_filter
attr_accessor
:chain
,
:filter
,
:kind
,
:options
,
:klass
,
:raw_filter
def
initialize
(
chain
,
filter
,
kind
,
options
,
klass
)
def
initialize
(
chain
,
filter
,
kind
,
options
,
klass
)
@chain
,
@kind
,
@klass
=
chain
,
kind
,
klass
@chain
,
@kind
,
@klass
=
chain
,
kind
,
klass
normalize_options!
(
options
)
normalize_options!
(
options
)
@per_key
=
options
.
delete
(
:per_key
)
@raw_filter
,
@options
=
filter
,
options
@raw_filter
,
@options
=
filter
,
options
@filter
=
_compile_filter
(
filter
)
@filter
=
_compile_filter
(
filter
)
@compiled_options
=
_compile_options
(
options
)
@compiled_options
=
_compile_options
(
options
)
@callback_id
=
next_id
@callback_id
=
next_id
_compile_per_key_options
end
end
def
clone
(
chain
,
klass
)
def
clone
(
chain
,
klass
)
obj
=
super
()
obj
=
super
()
obj
.
chain
=
chain
obj
.
chain
=
chain
obj
.
klass
=
klass
obj
.
klass
=
klass
obj
.
per_key
=
@per_key
.
dup
obj
.
options
=
@options
.
dup
obj
.
options
=
@options
.
dup
obj
.
per_key
[
:if
]
=
@per_key
[
:if
].
dup
obj
.
per_key
[
:unless
]
=
@per_key
[
:unless
].
dup
obj
.
options
[
:if
]
=
@options
[
:if
].
dup
obj
.
options
[
:if
]
=
@options
[
:if
].
dup
obj
.
options
[
:unless
]
=
@options
[
:unless
].
dup
obj
.
options
[
:unless
]
=
@options
[
:unless
].
dup
obj
obj
...
@@ -124,8 +118,9 @@ def normalize_options!(options)
...
@@ -124,8 +118,9 @@ def normalize_options!(options)
options
[
:unless
]
=
Array
(
options
[
:unless
])
options
[
:unless
]
=
Array
(
options
[
:unless
])
options
[
:per_key
]
||=
{}
options
[
:per_key
]
||=
{}
options
[
:per_key
][
:if
]
=
Array
(
options
[
:per_key
][
:if
])
options
[
:per_key
][
:unless
]
=
Array
(
options
[
:per_key
][
:unless
])
options
[
:if
]
+=
Array
(
options
[
:per_key
][
:if
])
options
[
:unless
]
+=
Array
(
options
[
:per_key
][
:unless
])
end
end
def
name
def
name
...
@@ -147,22 +142,11 @@ def _update_filter(filter_options, new_options)
...
@@ -147,22 +142,11 @@ def _update_filter(filter_options, new_options)
def
recompile!
(
_options
,
_per_key
)
def
recompile!
(
_options
,
_per_key
)
_update_filter
(
self
.
options
,
_options
)
_update_filter
(
self
.
options
,
_options
)
_update_filter
(
self
.
per_key
,
_per_key
)
_update_filter
(
self
.
options
,
_per_key
)
@callback_id
=
next_id
@callback_id
=
next_id
@filter
=
_compile_filter
(
@raw_filter
)
@filter
=
_compile_filter
(
@raw_filter
)
@compiled_options
=
_compile_options
(
@options
)
@compiled_options
=
_compile_options
(
@options
)
_compile_per_key_options
end
def
_compile_per_key_options
key_options
=
_compile_options
(
@per_key
)
@klass
.
class_eval
<<-
RUBY_EVAL
,
__FILE__
,
__LINE__
+
1
def _one_time_conditions_valid_
#{
@callback_id
}
?
true if
#{
key_options
}
end
RUBY_EVAL
end
end
# Wraps code with filter
# Wraps code with filter
...
@@ -200,11 +184,6 @@ def apply(code, key=nil, object=nil)
...
@@ -200,11 +184,6 @@ def apply(code, key=nil, object=nil)
end
end
end
end
def
one_time_conditions_valid?
(
object
)
object
.
send
(
"_one_time_conditions_valid_
#{
@callback_id
}
?"
)
end
private
private
# Compile around filters with conditions into proxy methods
# Compile around filters with conditions into proxy methods
...
@@ -341,7 +320,7 @@ def compile(key=nil, object=nil)
...
@@ -341,7 +320,7 @@ def compile(key=nil, object=nil)
method
<<
"halted = false"
method
<<
"halted = false"
callbacks
=
yielding
callbacks
=
yielding
applicable_callbacks_for
(
key
,
object
).
reverse_each
do
|
callback
|
reverse_each
do
|
callback
|
callbacks
=
callback
.
apply
(
callbacks
,
key
,
object
)
callbacks
=
callback
.
apply
(
callbacks
,
key
,
object
)
end
end
method
<<
callbacks
method
<<
callbacks
...
@@ -369,13 +348,6 @@ def yielding
...
@@ -369,13 +348,6 @@ def yielding
method
.
join
(
"
\n
"
)
method
.
join
(
"
\n
"
)
end
end
# Selects callbacks that have valid <tt>:per_key</tt> condition
def
applicable_callbacks_for
(
key
,
object
)
return
self
unless
key
select
do
|
callback
|
callback
.
one_time_conditions_valid?
(
object
)
end
end
end
end
module
ClassMethods
module
ClassMethods
...
@@ -402,7 +374,7 @@ def __reset_runner(symbol)
...
@@ -402,7 +374,7 @@ def __reset_runner(symbol)
end
end
def
__callback_runner_name
(
key
,
kind
)
def
__callback_runner_name
(
key
,
kind
)
"_run__
#{
self
.
name
.
hash
.
abs
}
__
#{
kind
}
__
#{
key
.
hash
.
abs
}
__
callbacks"
"_run__
#{
self
.
name
.
hash
.
abs
}
__
#{
kind
}
__callbacks"
end
end
# This is used internally to append, prepend and skip callbacks to the
# This is used internally to append, prepend and skip callbacks to the
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录