有没有一种方法可以将if_enable配置为始终有条件通过或删除变量检查?

时间:2019-06-13 18:33:06

标签: origen-sdk

根据情况,我想将部分代码包装在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块中的测试仍在生成,但不会通过任何变量检查来控制。此功能是否已经存在,还是当前的当前解决方案是最好的方法?还是有其他更清洁的红宝石解决方案?

1 个答案:

答案 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