2015-07-13 54 views
-1

我正在寫一個ruby程序,但是我的代碼開始感覺太胖了,笨拙。我真的想重構代碼,但我不知道我能在哪裏,更不用說從哪裏開始。以下是我的程序中最大的方法,所以我認爲我可以更好地重構它們。有沒有人有重構以下紅寶石方法的任何提示或建議:重構此Ruby代碼的任何建議?

def project_name 
    project_object = fetch(:payload).fetch(:project) 
    client_object = fetch(:payload).fetch(:client) 

    project_name = 
    if project_object == nil 
     "" 
    else 
     project_object.fetch(:name) 
    end 

    client_name = 
    if client_object == nil 
     "" 
    else 
     client_object.fetch(:name) 
    end 

    if project_name.length > 0 && client_name.length > 0 
    "Project: #{project_name}(#{client_name})" 
    elsif project_name.length > 0 && client_name.length == 0 
    "Project: #{project_name}" 
    elsif project_name.length == 0 && client_name.length > 0 
    "Client: #{client_name}" 
    else 
    "" 
    end 
    end 

和...

def duration_formatter(date_1, date_2) 
date_1 = date_1.to_time 
date_2 = date_2.to_time 

if date_1.year == date_2.year 
    if date_1.month == date_2.month 
    if date_1.day == date_2.day 
     "#{date_1.strftime('%-d %b %Y')}" 
    else 
    "#{date_1.strftime('%-d')} - #{date_2.strftime('%-d %b %Y')}" 
    end 
    else 
    "#{date_1.strftime('%-d %b')} - #{date_2.strftime('%-d %b %Y')}" 
    end 
else 
    "#{date_1.strftime('%-d %b %Y')} - #{date_2.strftime('%-d %b %Y')}" 
end 

的任何意見或建議將主要讚賞

回答

0
project_name = 
    if project_object == nil 
     "" 
    else 
     project_object.fetch(:name) 
    end 

這種東西可以替換爲:

project_name = project_object ? project_object.fetch(:name) : "" 

與client_name相同。確保你正在檢查正確的條件。

而且你應該想出一些辦法來擺脫那些if樹木。