2012-05-26 72 views
0

我有n次类似的声明Ruby代码重构

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

请指明类似的问题http://codereview.stackexchange.com。投票迁移这一个。 –

回答

1

嗯,它可能不是你正在寻找的,但它缩短了很多代码。

另外,我删除了这些key?()方法,因为如果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