我想迭代一个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 :(得分: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
答案 1 :(得分:0)
除了循环中的break
之外,一切似乎都是合理的。我也喜欢解决方案的清洁。