From: HIDAKA Takahiro Date: 2002-02-08T03:31:50+09:00 Subject: [ruby-list:33789] Re: WebDAV client  ひだかです。 At 2002/02/08 01:30:10 Minero Aoki wrote: > あおきです。 > > このまえ Dave Thomas にも「WebDAV 実装したいんで好きなメソッド > 投げられるようにしてくれない?」と言われて send_request という > メソッドを実装しました (ただし 1.6.5 以上限定)。それを使うと > net/http を拡張しなくてもいけます。こんな感じです。  なるほど。このためにあるのでしたか。というか Daveさんには 仕事の速さでは絶対勝てないぽいですね・・。 > これはまだドキュメント化してないので、今リクエストをくだされば > こっちのほうを変えられますので遠慮なくどうぞ。こういう機能が > 欲しいぞ、というのでも構いません。  でもなんとなく、ほかのメソッドと合わせておいたほうが、 あとからほかの人が使ったり拡張したりするときに有利なのかなとか 思っていまの構成にしています。  ruby-1.6.5 の頃のふるい http.rb では、define_http_method_interface で メソッドを作っていたのを新しいのではやめてしまったようなのですけど、 この手のものを復活させるというのは面倒ですか? とりあえずいまは 以下のようなものを勝手に追加して試してみています。 module Net class HTTP public def self.define_http_method_interface2( klass ) cname = klass.name.gsub(/^.*::/, '') name = cname.downcase hasdata = klass::REQUEST_HAS_BODY hasdest = klass::RESPONSE_HAS_BODY lineno = __LINE__ + 2 src = <<" ----" def #{name}( path, #{hasdata ? 'data,' : ''} initheader = nil #{hasdest ? ', dest = nil, &block' : ''} ) res = nil #{hasdest ? '' : 'res = '} request( #{cname}.new( path, initheader ) #{hasdata ? ',data' : ''} ) #{hasdest ? 'do |res| res.read_body( dest, &block ) end unless @newimpl then res.value return res, res.body end ' : ' @newimpl or res.value'} res end def request_#{name}( path, #{hasdata ? 'data,' : ''} initheader = nil, &block ) request #{cname}.new(path, initheader), #{hasdata ? 'data, ' : ''} &block end ---- module_eval src, __FILE__, lineno end end end -- ひだかたかひろ