Temfile2010/01/14

Tempfile

クラスの継承リスト: Tempfile < File  < IO  < Enumerable  < File::Constants  < Object  < Kernel

であるにも関わらず、

irb(main):001:0> tempfile = Tempfile.new('basename')
=> #<File:xxxx>
irb(main):002:0> tempfile.class
=> Tempfile
irb(main):003:0> tempfile.kind_of? IO
=> false
irb(main):004:0> tempfile.kind_of? File
=> false

になるのはどうして? 教えて偉いひと。

方法は判るけど、理由が判らない……。

Mechanizeでファイルを送信しようとした時に、Tempfileのインスタンスを渡すと どうしても Content-Type が 'multipart/form-data' にならないなあと思ったら、 これが原因だった。

具体的には、 WWW::Mechanize#post で、クエリの value に is_a?(IO) を訊いている。 ここで、value が Tempfile だと false が返って 'application/x-www-form-urlencoded' で送信されてしまう。

とりあえず、急ぎだったので、

--       if v.is_a?(IO)
++       if v.is_a?(IO) || v.is_a?(Tempfile)

な感じで逃げる。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://dragonstar.asablo.jp/blog/2010/01/14/4812657/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。