2013-01-04 48 views
-1

我想循環訪問一個URL數組,並在給定的URL的HTTP請求超時的情況下從中移除元素。它已通過以下方式實施:遍歷數組並有條件地刪除元素

@urls.delete_if do |url| 
    begin 
    doc = perform_request(some_params) 
    break 
    rescue TimeoutError 
    Rails.logger.warn("URL #{url} times out, will be removed from list") 
    true 
    end 
end 

任何人都可以獲得更清潔的解決方案嗎?

+0

codereview.stackexchange.com可能是這個問題的一個更好的地方。 – quandrum

回答

0

除了週期中的break之外,一切似乎都合理。我也喜歡解決方案的清潔。

+0

確切地說,討厭在那裏的突破,這就是爲什麼張貼它 - 也許有人有一個更好的想法如何實施這個清潔。 –

+0

@EmilPetkov爲什麼你需要休息? –

+0

如果該URL有效,則不應將其刪除,並應繼續處理該塊以外的內容。不中斷將繼續請求所有網址。順便說一句。 「真」可以刪除:) –

1

還有更多的事情可能會比超時錯誤,最好是要求肯定而不是否定。也就是說,網站是否以我想要的方式迴應,而不是網站沒有以我想要的方式迴應。此外,我會鼓勵實踐不變性,即不改變您的數據,而是從舊的創建新版本。我的版本看起來像:

@urls = %w[www.google.com www.example.com] 
valid_urls = @urls.select{ |url| up?(url)} #=> [www.google.com] 

def up?(url) 
    Net::HTTP.new(url).head('/').kind_of? Net::HTTPOK 
end