From: Jonas Pfenniger Date: 2011-01-09T21:58:16+09:00 Subject: [ruby-core:34267] [Ruby 1.9-Feature#4254][Open] Allow method transplanting --mimepart_4d29b0e4b3354_1f2bb2a32d4256e Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Feature #4254: Allow method transplanting http://redmine.ruby-lang.org/issues/show/4254 Author: Jonas Pfenniger Status: Open, Priority: Normal Category: core, Target version: 1.9.3 Is there a technical reason to not allow re-binding a method from one mod= ule to any other module ? module M def foo; "foo"; end end module N; end N.send(:define_method, :foo, M.instance_method(:foo)) #=3D> should not = raise It's like monkey-patching. Powerful, dangerous, but also really useful. I= t could allow different variations of method_wrap or alias_method_chain t= hat are not possible right now. ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4d29b0e4b3354_1f2bb2a32d4256e Content-Type: text/plain; name=0001-method-transplanting-Allow-to-set-an-UnboundMethod-t.patch Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=0001-method-transplanting-Allow-to-set-an-UnboundMethod-t.patch RnJvbSAwMzM2ZWMzMzRmN2ViNjZkMmNmMDViZDdhMjlkNzQ4NzgwZDYwNDRl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb25hcyBQZmVubmln ZXIgPGpvbmFzQHBmZW5uaWdlci5uYW1lPgpEYXRlOiBTdW4sIDkgSmFuIDIw MTEgMDA6MTM6NTcgKzAwMDAKU3ViamVjdDogW1BBVENIXSBtZXRob2QgdHJh bnNwbGFudGluZzogQWxsb3cgdG8gc2V0IGFuIFVuYm91bmRNZXRob2QgdG8g YW55IG1vZHVsZS4KCkl0J3MgdGltZSB0byBncm93IHVwLCByZW1vdmUgdGhl IHNlY3VyaXR5IG5ldHMuCi0tLQogcHJvYy5jIHwgICAxMSAtLS0tLS0tLS0t LQogMSBmaWxlcyBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDExIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Byb2MuYyBiL3Byb2MuYwppbmRleCA3 ZGYyZWM4Li42NTJiM2UxIDEwMDY0NAotLS0gYS9wcm9jLmMKKysrIGIvcHJv Yy5jCkBAIC0xMjkzLDE3ICsxMjkzLDYgQEAgcmJfbW9kX2RlZmluZV9tZXRo b2QoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBtb2QpCiAgICAgaWYg KHJiX29ial9pc19tZXRob2QoYm9keSkpIHsKIAlzdHJ1Y3QgTUVUSE9EICpt ZXRob2QgPSAoc3RydWN0IE1FVEhPRCAqKURBVEFfUFRSKGJvZHkpOwogCVZB TFVFIHJjbGFzcyA9IG1ldGhvZC0+cmNsYXNzOwotCWlmIChyY2xhc3MgIT0g bW9kICYmICFSVEVTVChyYl9jbGFzc19pbmhlcml0ZWRfcChtb2QsIHJjbGFz cykpKSB7Ci0JICAgIGlmIChGTF9URVNUKHJjbGFzcywgRkxfU0lOR0xFVE9O KSkgewotCQlyYl9yYWlzZShyYl9lVHlwZUVycm9yLAotCQkJICJjYW4ndCBi aW5kIHNpbmdsZXRvbiBtZXRob2QgdG8gYSBkaWZmZXJlbnQgY2xhc3MiKTsK LQkgICAgfQotCSAgICBlbHNlIHsKLQkJcmJfcmFpc2UocmJfZVR5cGVFcnJv ciwKLQkJCSAiYmluZCBhcmd1bWVudCBtdXN0IGJlIGEgc3ViY2xhc3Mgb2Yg JXMiLAotCQkJIHJiX2NsYXNzMm5hbWUocmNsYXNzKSk7Ci0JICAgIH0KLQl9 CiAJcmJfbWV0aG9kX2VudHJ5X3NldChtb2QsIGlkLCAmbWV0aG9kLT5tZSwg bm9leCk7CiAgICAgfQogICAgIGVsc2UgaWYgKHJiX29ial9pc19wcm9jKGJv ZHkpKSB7Ci0tIAoxLjcuMy40Cgo= --mimepart_4d29b0e4b3354_1f2bb2a32d4256e--