HTTPResponse#value は 2xx系の response でない場合、例外を返す
def expand(url) target_url = url loop do res = fetch(target_url) case res when Net::HTTPSuccess then return target_url when Net::HTTPRedirection then target_url = res["location"] else return res.value end end end
省略されている URL (t.co など)を展開するために、上記の様な関数を書いたんだけども、response が 404 Not Found が出た時に処理がこけているという指摘をいただいた。
HTTPResponse#response の処理を確認
pry(main)> show-method Net::HTTPResponse#value def value error! unless self.kind_of?(Net::HTTPSuccess) end
2xx 系の response ではない場合に error! メソッドをコールしている。
HTTPResponse#error! メソッドを確認
pry(main)> show-method Net::HTTPResponse#error! def error! #:nodoc: raise error_type().new(@code + ' ' + @message.dump, self) end
例外を raise してました。
参考
http://docs.ruby-lang.org/ja/2.0.0/method/Net=3a=3aHTTPResponse/i/value.html
マニュアルにも書いてある