2011-05-03 22 views
0

我寫一個程序,以便更好地學習編程的,我想用RSpec的,這樣我可以瞭解這一點。但是,因爲代碼並不是RSpec友好的,所以我需要將它分解成方法,以便我可以測試它。需要幫助打破了Ruby代碼到方法,

我不需要任何人寫的代碼的我,但或許可以解釋我怎麼能打破它。我對編程是陌生的,這種事情(把事情分解成方法)對我來說是一個非常困難的概念。

這是我有:

if params[:url] != '' 
    url = params[:url] #line created so I can return url more easily (or, in general) 
    words = params[:word].gsub("\n", ",").delete("\r").split(",") #.delete redundant? 
    words.reject!(&:empty?) 
    words.each(&:lstrip!) 
    return "#{words}", "#{url}" #so that I can return url, not sure how to do that yet 
    end 

的代碼是一個SERP檢查器,它需要一個URL和關鍵字,並在搜索引擎中檢查他們的位置。

對於URL,它會僅僅是用戶希望檢查網站的網址...的話,這將是他們的關鍵字要檢查他們的網站在對谷歌..用戶可填寫輸入表格如下:

Corn on the cob, 
Fibonacci, 
StackOverflow 
Chat, Meta, About 
Badges 
Tags,, 
Unanswered 
Ask Question 
+1

首先,你有一個額外的'結束'。與之配對的是什麼?你想刪除它嗎?接下來,告訴我們至少代碼的目的。你在「url」這樣的註釋中加入了一些單詞,但除非你提供關於該代碼的一般解釋,否則這是毫無意義的。 – sawa 2011-05-03 04:39:22

+0

這是一個SERP檢查器,我將這一點添加到OP的末尾。也刪除了無關的結束。 – 2011-05-03 05:48:15

+1

你可以詳細說明'params [:url]'和'params [:word]'的格式嗎?你期待什麼樣的輸入? – sawa 2011-05-03 06:07:44

回答

1

您的代碼需要一個草率的字符串並將其變成乾淨的數組。你首先清理字符串,然後擦亮陣列。您可以爲這些操作定義方法。

def clean_up_words(str) 
#code to clean str 
    str 
end 

def clean_up_list(arr) 
    #code to clean arr 
    arr 
end 

dirty_list = clean_up_words(params[:word]).split(',') 
clean_list = clean_up_list(dirty_list) 
1
def foo params 
    url = params[:url] 
    url.empty? ? nil : [params[:word].scan(/[^\s\r,]+/), url] 
end 
  • 要分配url = params[:url]。如果你要做到這一點,你應該之前,你指的是同樣的事情,以減少呼籲param[]量等地做到這一點。
  • 您提取的話幾個條件。 (a)按「\ n」,「,」,「\ r」分隔,(b)該單詞不應長度爲0,(c)應刪除白色字符。所有這些可以放在一起作爲scan(/[^\s\r,]+/)
  • 要返回兩個變量時,URL不是空的。在這種情況下使用數組。