2015-07-13 55 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树木。