Ruby代码重构

时间:2012-05-26 21:15:55

标签: ruby refactoring

我有n次类似的陈述

    if trigger_data.tt_closed
      unless trouble_ticket.changes.key?(:status)
        @run = 0
        break
      end
      unless trouble_ticket.changes[:status][1] == "Closed"
        @run = 0
        break
      end
    end

    if trigger_data.tt_assignee
      unless trouble_ticket.changes.key?(:assigned_to)
        @run = 0
        break
      end
      unless trouble_ticket.changes[:assigned_to][1] == trigger_data.tt_assignee
        @run
        break
      end
    end

如何重构该代码?也许动态语句构建与传递一些哈希输入。我是元编程的新手。请给我建议

1 个答案:

答案 0 :(得分:1)

嗯,它可能不是你想要的,但它会缩短代码。

另外,我删除了那些关键的?()方法,因为如果key不存在,它只传递nil,而Ruby中的含义与if语句的false相同。

为了清楚起见,我把它留了2条if语句。 :)

changes = trouble_ticker.changes
if trigger_data.tt_closed && changes[:status][1] != "Closed"
  @run = 0
  break
end

if t = trigger_data.tt_assignee && changes[:assigned_to][1] != t)
  @run = 0
  break
end