节点模式以匹配开始中的一些但不是所有节点
Node pattern to match some, but not all nodes within a begin
我正在努力编写一个单节点匹配来检测这种情况:
chef_gem 'deep_merge' do
action :nothing
compile_time true
end.run_action(:install)
这个模式是我最初写的
def_node_matcher :compile_time_and_run_action?, <<-PATTERN
(send
$(block
(send nil? ... )
(args)
(begin
(send nil? :action (sym $_) )
(send nil? :compile_time (true) )
)
) :run_action (sym $_) )
PATTERN
问题是操作方法,compile_time 方法可以按任何顺序排列,开头可能还有其他方法:
chef_gem 'deep_merge' do
compile_time true
action :nothing
foo bar
end.run_action(:install)
过去我在数组和散列中使用过 <>,但这似乎在开始时不起作用,所以像这样的东西不会削减它:
def_node_matcher :compile_time_and_run_action?, <<-PATTERN
(send
$(block
(send nil? ... )
(args)
<(begin
...
(send nil? :action (sym $_) )
(send nil? :compile_time (true) )
)>
) :run_action (sym $_) )
PATTERN
在我缺少的单个匹配器中是否有一种很好的方法来做到这一点?
-蒂姆
使用 <>
是正确的方法,但将此用于 begin
的 children。我相信这应该有效:
def_node_matcher :compile_time_and_run_action?, <<-PATTERN
(send
$(block
(send nil? ... )
(args)
(begin <
(send nil? :action (sym $_) )
(send nil? :compile_time (true) )
...
>)
) :run_action (sym $_) )
PATTERN
我正在努力编写一个单节点匹配来检测这种情况:
chef_gem 'deep_merge' do
action :nothing
compile_time true
end.run_action(:install)
这个模式是我最初写的
def_node_matcher :compile_time_and_run_action?, <<-PATTERN
(send
$(block
(send nil? ... )
(args)
(begin
(send nil? :action (sym $_) )
(send nil? :compile_time (true) )
)
) :run_action (sym $_) )
PATTERN
问题是操作方法,compile_time 方法可以按任何顺序排列,开头可能还有其他方法:
chef_gem 'deep_merge' do
compile_time true
action :nothing
foo bar
end.run_action(:install)
过去我在数组和散列中使用过 <>,但这似乎在开始时不起作用,所以像这样的东西不会削减它:
def_node_matcher :compile_time_and_run_action?, <<-PATTERN
(send
$(block
(send nil? ... )
(args)
<(begin
...
(send nil? :action (sym $_) )
(send nil? :compile_time (true) )
)>
) :run_action (sym $_) )
PATTERN
在我缺少的单个匹配器中是否有一种很好的方法来做到这一点?
-蒂姆
使用 <>
是正确的方法,但将此用于 begin
的 children。我相信这应该有效:
def_node_matcher :compile_time_and_run_action?, <<-PATTERN
(send
$(block
(send nil? ... )
(args)
(begin <
(send nil? :action (sym $_) )
(send nil? :compile_time (true) )
...
>)
) :run_action (sym $_) )
PATTERN