2012-05-26 70 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