open-uriにどんなメソッドがあるか調べてみた。

通信関係はどのようになっているかよく分かりません。
なので、open-uriにはどのようなメソッドが存在しているのか調べてみました。

open-uriって?

httpをFileオブジェクトのような感じで扱えるライブラリ。

require 'open-uri'
uri = "http://www.ruby-lang.org/"
open(uri){|f| f.each{|l| puts l}}

#File.open(file){|f| f.each{|l| puts l}} と似ている

どんなメソッドがあるか調べる。

ここのurlで調べてみた。

require 'open-uri'

f=File.open(ENV["HOME"]+"/a") #何かのファイル。
safe_methods = []
uri = "http://d.hatena.ne.jp/trotr/"
#uri = "http://www.google.co.jp"
	#googleでやってみたらすごい表示になっていた。

OpenURI.open_uri(uri) do |ou| 
  targets = (ou.methods - f.methods) - %w{close! _close }
    i = 0
  targets.each do |e|
    begin
      puts("#{i}:   \"#{e }\": #{ou.send(e)}")
     #「3:   <"MethodName>": メソッドの実行結果」という感じで出力する。
      safe_methods << e
      i += 1
    rescue
      next
      #puts $!; next
    end
  end
  p targets - safe_methods #例外が発生 = 呼べなかったメソッド。
end

結果

0:   "charset": euc-jp
1:   "meta": last-modifiedTue, 08 Jan 2008 05:52:47 GMTvaryAccept-EncodingdateTue, 08 Jan 2008 12:56:07 GMTcontent-typetext/html; charset=euc-jpserverApachetransfer-encodingchunked
2:   "last_modified": Tue Jan 08 14:52:47 +0900 2008
3:   "__getobj__": #<File:0xb7e4e6cc>
4:   "base_uri": http://d.hatena.ne.jp/trotr/
5:   "delete": #<File:0xb7e4e6cc>
6:   "length": 111892
7:   "content_encoding": 
8:   "content_type_parse": text/htmlcharseteuc-jp
9:   "status": 200OK
10:   "size": 111892
11:   "content_type": text/html
["method_missing", "__setobj__", "meta_add_field", "base_uri=", "status=", "unlink", "open"]

呼べなかったメソッドの例外

引数が足りないなどが原因だったみたい。

method_missing
  wrong number of arguments (0 for 1)
__setobj__
  wrong number of arguments (0 for 1)
meta_add_field
  wrong number of arguments (0 for 2)
base_uri=
  wrong number of arguments (0 for 1)
status=
  wrong number of arguments (0 for 1)
unlink
  can't convert nil into String
open
  can't convert nil into String