收紧 Ruby 代码,制作小方法

Tightening Up Ruby Code, Making Small Methods

我有一个方法被 RuboCop 报告为太长:每个方法只允许七行。这是有问题的方法:

def on(definition, visit = false, &block)
  if @active.is_a?(definition)
    block.call @active if block
    return @active
  end

  @active = definition.new
  @active.load if visit

  block.call @active if block

  @active
end

我打算将顶部 if 条件转换为保护子句,但我不知道该怎么做。

我尝试将第 7 行和第 8 行组合成:

@active = definition.new().load if visit

但这绝对行不通。

我不能让 RuboCop 违规保持活动状态,也不能更改容差。

这将减少 2 行:

def on(definition, visit = false, &block)
  unless @active.is_a?(definition)  
    @active = definition.new
    @active.load if visit
  end

  block.call @active if block
  @active
end