2013-08-23 33 views
0

我使用Code Climate同步我的应用程序以进行代码审查。RAILS中的重构方法复杂性

LIB /模型/用户/同步/ basecamp_inc.rb

def todo_list(todos,basecamp_account,proj_id) 
    todos.map{|todo| 
    task = basecamp_tasklist(proj_id,todo['id'],basecamp_account)    
    task_list(task['todos']['remaining'],task['name'],'remain') if task['todos']['remaining'].present? 
    task_list(task['todos']['completed'],task['name'],'complete') if task['todos']['completed'].present? 
    } 
end 

def task_list(tasks,todo_list,status) 
    tasks.map{|task| 
    task_created(task,todo_list) 
    task['assignee'].present? && user_owner?(task['assignee']['name']) ? save_task_activity('was assigned to a',task,todo_list,task['updated_at'],'assign') : [tasks,todo_list,status] 
    status == 'complete' && user_owner?(task['completer']['name']) && current_date?(task['completed_at']) ? save_task_activity('finished',task,todo_list,task['completed_at'],'finished') : [tasks,todo_list,status]   
    } 
end 

上述被编码气候检测为具有复杂的方法的代码。我不明白为什么Code Climate认为它很复杂。那么,那个代码的等级仍然是C,我想重构它。我该如何改进?

回答

0

您应该考虑移动下列条件为私有方法:

task['assignee'].present? && user_owner?(task['assignee']['name']) ? save_task_activity('was assigned to a',task,todo_list,task['updated_at'],'assign') : [tasks,todo_list,status] 
status == 'complete' && user_owner?(task['completer']['name']) && current_date?(task['completed_at']) ? save_task_activity('finished',task,todo_list,task['completed_at'],'finished') : [tasks,todo_list,status]   

您应该考虑移动下列调用一个方法采取status参数,例如:

task_list(task['todos']['remaining'], task['name'], 'remain') if task['todos']['remaining'].present? 

将重构为:

def build_task_list(tasks, name, status) 
    task_list(tasks, name, status) if task.present? 
end 

build_task_list(task['todos']['remaining'], task['name'], 'remain') 
build_task_list(task['todos']['completed'], task['name'], 'complete') 
+0

谢谢你会试试你的建议 – xirukitepe