From: Matt Todd Date: 2006-08-21T15:55:42+09:00 Subject: Re: [QUIZ] [Solution] QAPrototype (#91) ------=_Part_40324_31461549.1156143339463 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Here's a simple IRB session using mine: $ irb -rqap Call #start if you want to get a head start on QAPrototype... irb(main):001:0> start irb(prep):001:0> @f = Foo.new irb(prep):002:0> @f.bar For your convenience in testing, I've created a class called Foo and have already mixed in QAPrototype! Aren't you glad? And while I was at it, I went ahead and created an instance of Foo and put it into @f. Now we can all shout for joy! Heck, we even started up the conversation with method_missing! bar is undefined. Please define what I should do, starting with arguments this method should accept (skip and end with newline): def bar "Hello!" end Okay, I got it. Calling the method now! => "Hello!" irb(main):002:0> @f.add 10, 12 add is undefined. Please define what I should do, starting with arguments this method should accept (skip and end with newline): def add a, b a - b end Okay, I got it. Calling the method now! => -2 irb(main):003:0> @f.undo add is now gone from this class. => nil irb(main):004:0> @f.add 10, 12 add is undefined. Please define what I should do, starting with arguments this method should accept (skip and end with newline): def add a, b a + b end Okay, I got it. Calling the method now! => 22 irb(main):005:0> @f.dump class Foo def bar "Hello!" end def add a, b a + b end end => nil irb(main):006:0> @f.dump "/tmp/foo.rb" Class was written to /tmp/foo.rb successfully! => nil irb(main):007:0> exit $ There you have it. Check out the file attached for my solution. Of particular note to my solution is an #undo method that will remove the last method added. As you can tell, it supports arguments. However, I was not able to fully coax blocks to work properly, at least on creation (when it calls it after you've created it). That's negligible, though, and I'll probably iron that out a bit. Cheers, M.T. P.S. - No, I didn't go into another IRB session for those two lines... I just printed that out to give the general idea of what just happened to get things rolling. ------=_Part_40324_31461549.1156143339463 Content-Type: text/x-ruby-script; name=qap.rb; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_d6jm4p Content-Disposition: attachment; filename="qap.rb" IyBSdWJ5UXVpeiAjOTEgLSBRQVByb3RvdHlwZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBR QVByb3RvdHlwZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgVGhpcyBtb2R1 bGUgbWl4ZXMgaW4gdG8gY2xhc3NlcyB0aGF0IHlvdSB3YW50IHRvIGJlIGFibGUgdG8gaGFuZGxl IHVua25vd24gbWV0aG9kIGNhbGxzCiMgYnkgcmVxdWVzdGluZyB0aGUgdXNlciB0byBnaXZlIHRo ZSBib2R5IG9mIHRoZSBtZXRob2QgaW50ZXJhY3RpdmVseS4gVGhpcyB0b29sIGNhbiBiZQojIHVz ZWQgd2l0aGluIElSQiB3aXRoIGBpcmIgLXJxYXBgIGFuZCB0aGVuIGBpbmNsdWRlIFFBUHJvdG90 eXBlYCB3aXRoaW4gdGhlIGNsYXNzLgoKbW9kdWxlIFFBUHJvdG90eXBlCiAgCiAgYXR0ciA6X21l dGhvZHNfYWRkZWQKICAKICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIAogICMgTWV0aG9kIHdh cyBub3QgZGVmaW5lZCwgc28gbGV0J3MgZ2V0IHRoZSBib2R5IG9mIHRoZSBtZXRob2QKICBkZWYg bWV0aG9kX21pc3NpbmcgbmFtZSwgKmFyZ3MsICZibG9jawogICAgcHV0cyAiXG4je25hbWV9IGlz IHVuZGVmaW5lZC5cbiIKICAgIHB1dHMgIlBsZWFzZSBkZWZpbmUgd2hhdCBJIHNob3VsZCBkbywg c3RhcnRpbmcgd2l0aCBhcmd1bWVudHMiCiAgICBwdXRzICJ0aGlzIG1ldGhvZCBzaG91bGQgYWNj ZXB0IChza2lwIGFuZCBlbmQgd2l0aCBuZXdsaW5lKTpcblxuIgogICAgCiAgICAjIGdldCBhcmd1 bWVudHMKICAgIHByaW50ICJkZWYgI3tuYW1lfSAiOyAkc3Rkb3V0LmZsdXNoOyBhcmd1bWVudHMg PSBnZXRzCiAgICAKICAgICMgZ2V0IG1ldGhvZCBib2R5CiAgICBtZXRob2QgPSAiIgogICAgd2hp bGUgKHByaW50ICcgICc7ICRzdGRvdXQuZmx1c2g7IGxpbmUgPSBnZXRzKSAhPSAiXG4iCiAgICAg IG1ldGhvZCA8PCAiICAgICIgPDwgbGluZQogICAgZW5kCiAgICBwdXRzICJlbmRcbiIKICAgIAog ICAgaWYgbWV0aG9kID09ICIiCiAgICAgIHB1dHMgIlxuT29wczogeW91IGxlZnQgdGhlIG1ldGhv ZCBlbXB0eSBzbyB3ZSBkaWRuJ3QgYWRkIGl0LlxuXG4iCiAgICAgIHJldHVybgogICAgZW5kCiAg ICAKICAgIHB1dHMgIlxuT2theSwgSSBnb3QgaXQuXG5cbiIKICAgIAogICAgIyBub3cgZGVmaW5l IGEgbmV3IG1ldGhvZAogICAgc2VsZi5jbGFzcy5jbGFzc19ldmFsIDw8LSJlbmQ7IgogICAgICBk ZWYgI3tuYW1lfSAje2FyZ3VtZW50c30KICAgICAgICAje21ldGhvZH0KICAgICAgZW5kCiAgICBl bmQ7CiAgICAKICAgICMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIHRvIHRoZSBzdGFjayBmb3IgdW5k b2VzIGFuZCBkdW1wcwogICAgQF9tZXRob2RzX2FkZGVkIHx8PSBbXQogICAgQF9tZXRob2RzX2Fk ZGVkIDw8IHsgOm5hbWUgPT4gbmFtZSwgOmFyZ3VtZW50cyA9PiBhcmd1bWVudHMuY2hvbXAsIDpi b2R5ID0+IG1ldGhvZC5jaG9tcCB9CiAgICAKICAgIHB1dHMgIlxuQ2FsbGluZyB0aGUgbWV0aG9k IG5vdyFcblxuIgogICAgCiAgICBhcmdzIDw8IGJsb2NrIGlmIGJsb2NrLmlzX2E/IFByb2MgIyBk b2VzIHRoaXMgZXZlbiB3b3JrIHJpZ2h0PwogICAgcmV0dXJuIHNlbGYubWV0aG9kKG5hbWUpLmNh bGwoKmFyZ3MpCiAgZW5kCiAgCiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAKICAjIFVuZG8g d2lsbCB0YWtlIHRoZSBtZXRob2Qgd2UndmUgaW50ZXJhY3RpdmVseSBkZWZpbmVkIGxhc3QKICAj IGFuZCB3aWxsIHJlbW92ZSBpdCAodW5kb2luZyB0aGUgbGFzdCBtZXRob2QgZmlyc3QsIGFuZCBz byBvbikKICBkZWYgdW5kbwogICAgdGhlX21ldGhvZCA9IEBfbWV0aG9kc19hZGRlZC5wb3AKICAg IAogICAgaWYgdGhlX21ldGhvZC5uaWw/CiAgICAgIHB1dHMgIlxuWW91IGhhdmUgbm90IGludGVy YWN0aXZlbHkgZGVmaW5lZCBhbnkgbWV0aG9kcyFcbiIKICAgICAgcmV0dXJuCiAgICBlbmQKICAg IAogICAgc2VsZi5jbGFzcy5jbGFzc19ldmFsIHsgcmVtb3ZlX21ldGhvZCB0aGVfbWV0aG9kWzpu YW1lXSB9CiAgICAKICAgIHB1dHMgIlxuI3t0aGVfbWV0aG9kWzpuYW1lXX0gaXMgbm93IGdvbmUg ZnJvbSB0aGlzIGNsYXNzLlxuXG4iCiAgZW5kCiAgCiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK ICAKICAjIER1bXAgb3V0IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjbGFzcyB3ZSdyZSB3b3JraW5n IHdpdGgvYWRkaW5nIG1ldGhvZHMgdG8KICBkZWYgZHVtcCBmaWxlbmFtZSA9IG5pbAogICAgYm9k eSA9ICIiCiAgICBAX21ldGhvZHNfYWRkZWQuZWFjaCBkbyB8bWV0aG9kfAogICAgICBib2R5IDw8 IDw8LSJlbmQ7IgogIGRlZiAje21ldGhvZFs6bmFtZV19ICN7bWV0aG9kWzphcmd1bWVudHNdfQoj e21ldGhvZFs6Ym9keV19CiAgZW5kCmVuZDsKICAgIGVuZAogICAgCiAgICBrbGFzcyA9IDw8LSJl bmQ7IgpjbGFzcyAje3NlbGYuY2xhc3N9CiN7Ym9keS5jaG9tcH0KZW5kCmVuZDsKICAgIAogICAg aWYgIWZpbGVuYW1lLm5pbD8KICAgICAgRmlsZS5vcGVuKGZpbGVuYW1lLCBGaWxlOjpDUkVBVHxG aWxlOjpUUlVOQ3xGaWxlOjpSRFdSLCAwNjQ0KSBkbyB8ZmlsZXwKICAgICAgICBwdXRzICJcbkNs YXNzIHdhcyB3cml0dGVuIHRvICN7ZmlsZW5hbWV9IHN1Y2Nlc3NmdWxseSFcblxuIiBpZiBmaWxl LndyaXRlIGtsYXNzCiAgICAgIGVuZAogICAgZWxzZQogICAgICBwdXRzIGtsYXNzCiAgICBlbmQK ICBlbmQKICAKICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIAogIGRlZiBhZGRlZF9tZXRob2Rz CiAgICBAX21ldGhvZHNfYWRkZWQKICBlbmQKICAKICBhbGlhcyA6bWV0aG9kc19hZGRlZCA6YWRk ZWRfbWV0aG9kcwogIAplbmQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgSGVscCBpbiB0ZXN0 aW5nLi4uICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpjbGFzcyBGb287IGluY2x1ZGUgUUFQ cm90b3R5cGU7IGVuZAoKcHV0cyAiXG5DYWxsICNzdGFydCBpZiB5b3Ugd2FudCB0byBnZXQgYSBo ZWFkIHN0YXJ0IG9uIFFBUHJvdG90eXBlLi4uXG5cbiIKCmRlZiBzdGFydAogIHB1dHMgIlxuaXJi KHByZXApOjAwMTowPiBAZiA9IEZvby5uZXciCiAgcHV0cyAiaXJiKHByZXApOjAwMjowPiBAZi5i YXJcblxuIgogIAogIHB1dHMgIkZvciB5b3VyIGNvbnZlbmllbmNlIGluIHRlc3RpbmcsIEkndmUg Y3JlYXRlZCBhIGNsYXNzIGNhbGxlZCIKICBwdXRzICJGb28gYW5kIGhhdmUgYWxyZWFkeSBtaXhl ZCBpbiBRQVByb3RvdHlwZSEgQXJlbid0IHlvdSBnbGFkPyIKICBwdXRzICJBbmQgd2hpbGUgSSB3 YXMgYXQgaXQsIEkgd2VudCBhaGVhZCBhbmQgY3JlYXRlZCBhbiBpbnN0YW5jZSIKICBwdXRzICJv ZiBGb28gYW5kIHB1dCBpdCBpbnRvIEBmLiBOb3cgd2UgY2FuIGFsbCBzaG91dCBmb3Igam95ISIK ICBwdXRzICJIZWNrLCB3ZSBldmVuIHN0YXJ0ZWQgdXAgdGhlIGNvbnZlcnNhdGlvbiB3aXRoIG1l dGhvZF9taXNzaW5nISIKICAKICBAZiA9IEZvby5uZXcKICBAZi5iYXIKZW5kCgojIEVuZC4K ------=_Part_40324_31461549.1156143339463--