From: Samuel Williams Date: 2011-07-10T00:21:25+09:00 Subject: [ruby-dev:44070] [Ruby 1.9 - Feature #4788] resolv.rb refactoring Issue #4788 has been updated by Samuel Williams. I have a vested interest in this patch since I am the developer of RubyDNS. This update will allow RubyDNS to hook into resolve.rb more efficiently. Right now, I have to duplicate code in resolve.rb to get the right behaviour. Also, I originally suggested then name fetch_resource and thus I support Makoto Kishimoto's proposal about this change. Lets work to get this updated so that I can add good support for RubyDNS and Ruby 1.9. Thanks. ---------------------------------------- Feature #4788: resolv.rb refactoring http://redmine.ruby-lang.org/issues/4788 Author: Makoto Kishimoto Status: Open Priority: Normal Assignee: Akira Tanaka Category: lib Target version: 1.9.3 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/lib/rubydns/resolv.rb #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain -- http://redmine.ruby-lang.org