根据情况,我想将部分代码包装在if_enable块中,但是要有条件地包装。
如果我们正在执行表征工作,那么我们将根据测试代码对测试进行分区,以减少实验的测试时间。对于其他任何工作,这些测试都始终用于生产测试。
原始代码的格式如下:
Flow.create() do |options|
test_a
test_b
end
目前解决此问题的方法是:
def a_tests
if job == :charz
if_enable '$enableA' do
yield
end
else
yield
end
end
def b_tests
if job == :charz
if_enable '$enableB' do
yield
end
else
yield
end
end
Flow.create() do |options|
a_tests do
test_a
end
b_tests do
test_b
end
end
我想做的是这样的:
Flow.create() do |options|
a_flag = job == :charz ? '$enableA' : ''
b_flag = job == :charz ? '$enableB' : ''
if_enable a_flag do
test_a
end
if_enable b_flag do
test_b
end
end
如果传递一个空值(或者可以为nil或false),将导致if_enable块中的测试仍在生成,但不会通过任何变量检查来控制。此功能是否已经存在,还是当前的当前解决方案是最好的方法?还是有其他更清洁的红宝石解决方案?
答案 0 :(得分:2)
使用现有API的纯流程级别解决方案将是在运行时强制启用非cz作业,如下所示:
Flow.create do |options|
if job != :charz
enable '$enableA'
enable '$enableB'
end
if_enable '$enableA' do
test_a
end
if_enable '$enableB' do
test_b
end
end
您当前的解决方案也相当不错,尽管我会通过将方法定义移至您的界面并使其更通用来增强它:
# lib/my_app/my_interface.rb
def if_enable_when_charz(var)
if job == :charz
if_enable var do
yield
end
else
yield
end
end
然后,您将有一个很好的助手来保持流程逻辑的清晰:
# program/my_flow.rb
Flow.create do |options|
if_enable_when_charz '$enableA' do
test_a
end
if_enable_when_charz '$enableB' do
test_b
end
end