--1394090772-989359847-1071506166963 Content-Type: MULTIPART/MIXED; BOUNDARY="1394090772-989359847-1071506166=:3963" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime / docserver.cac.washington.edu for more info. --1394090772-989359847-1071506166963 Content-Type: TEXT/PLAIN; charset=US-ASCII I've probably spent about 2 hours trying it out. There's a flag in it for how close a match is required (you can make something line "asdeflk" match String#detect if you set it low enough), and it seems to work reasonable well if that value is set to something high (in the range 0 - 1.0), like 0.5 - 0.75. I've attached the source. FuzzyMatch.rb is from rubyforge.org (in the code snippets) section, slightly modified. On Mon, 15 Dec 2003, T. Onoma wrote: > On Monday 15 December 2003 01:31 am, Derek Lewis wrote: > > This sounds like some "fun" code I was writing the other day, just for the > > heck of it. I wrote a module I called CloseCall, and it defined > > method_missing. It searches all the methods on the object with the same > > (or compatible) arity, and uses the String#fuzzy_match method from the > > code snippets on rubyforge to find a method with a similar name. When it > > finds one similar enough, it uses class_eval to define the method, so > > method_missing doesn't get called the next time. > > > > I can post the code if there's any interest, but it's not terribly pretty, > > as it was more of an experiment than anything. :) > > I would certainly enjoy seeing it. How much have you tried it out? > > T. > > Derek Lewis Java Web-Application Developer Email : email / lewisd.com Cellular : 604.312.2846 Website : http://www.lewisd.com "If you've got a 5000-line JSP page that has "all in one" support for three input forms and four follow-up screens, all controlled by "if" statements in scriptlets, well ... please don't show it to me :-). Its almost dinner time, and I don't want to lose my appetite :-)." - Craig R. McClanahan --1394090772-989359847-1071506166963 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="CloseCall.rb" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.LNX.4.44.0312150836060.3963 / stack.f00f.net> Content-Description: Content-Disposition: attachment; filename="CloseCall.rb" DQpyZXF1aXJlICdGdXp6eU1hdGNoJw0KDQptb2R1bGUgQ2xvc2VDYWxsDQoN CglNSU5fU0NPUkUgPSAwLjc1DQoNCglkZWYgZmluZF9zaW1pbGFyX3N5bWJv bChzeW1ib2wsIGFyZ3MpDQoJCW1ldGhvZHMgPSBzZWxmLnB1YmxpY19tZXRo b2RzLmZpbmRfYWxsIHsgfHN5bXwNCgkJCWFyaXR5ID0gc2VsZi5tZXRob2Qo c3ltKS5hcml0eQ0KCQkJYXJpdHkgPCAwIHx8IGFyaXR5ID09IGFyZ3MNCgkJ fQ0KDQoJCSNwIG1ldGhvZHMNCg0KCQltZXRob2Qsc2NvcmUgPSBiZXN0X21h dGNoKHN5bWJvbCwgbWV0aG9kcykNCgkJI3B1dHMgIk1ldGhvZDogI3ttZXRo b2R9ICAgU2NvcmU6ICN7c2NvcmV9Ig0KCQlyZXR1cm4gbWV0aG9kIGlmIChz Y29yZSA+IE1JTl9TQ09SRSkNCg0KCQlwdXRzICJTY29yZSA9ICN7c2NvcmV9 Ig0KDQoJCXJldHVybiBuaWwNCgllbmQNCg0KCWRlZiBiZXN0X21hdGNoKG5h bWUsIHRoaW5ncykNCgkJaGlnaF9zY29yZSA9IC0xDQoJCWhpZ2hfbWF0Y2gg PSBuaWwNCg0KCQluYW1lID0gbmFtZS50b19zDQoNCgkJdGhpbmdzLmVhY2gg eyB8dGhpbmd8DQoJCQlzdHIgPSB0aGluZy50b19zdHINCgkJCWlmIHN0ciAh PSBuaWwNCgkJCQkjcHV0cyAiQ2hlY2tpbmcgI3tzdHJ9Ig0KCQkJCXNjb3Jl ID0gc3RyLmZ1enp5X21hdGNoKG5hbWUpDQoJCQkJaWYgKHNjb3JlID4gaGln aF9zY29yZSkNCgkJCQkJaGlnaF9zY29yZSA9IHNjb3JlDQoJCQkJCWhpZ2hf bWF0Y2ggPSB0aGluZw0KCQkJCWVuZA0KCQkJZW5kDQoJCX0NCg0KCQlyZXR1 cm4gaGlnaF9tYXRjaCwgaGlnaF9zY29yZQ0KCWVuZA0KDQoJZGVmIG1ldGhv ZF9taXNzaW5nKHN5bWJvbCwgKmFyZ3MpDQoJCXB1dHMgIkZpbmRpbmcgbWV0 aG9kIGZvciAje3N5bWJvbH0gd2l0aCAje2FyZ3MubGVuZ3RofSBhcmdzIg0K CQlzeW0gPSBmaW5kX3NpbWlsYXJfc3ltYm9sKHN5bWJvbCwgYXJncy5sZW5n dGgpDQoNCgkJaWYgc3ltICE9IG5pbA0KCQkJbWV0aG9kID0gbWV0aG9kKHN5 bSkNCg0KCQkJbWF4X2FyaXR5ID0gc2VsZi5wdWJsaWNfbWV0aG9kcy5jb2xs ZWN0IHsgfHN5bXwNCgkJCQlzZWxmLm1ldGhvZChzeW0pLmFyaXR5DQoJCQl9 LnNvcnQubGFzdA0KDQoJCQlpZiAhc2VsZi5yZXNwb25kX3RvPyhzeW1ib2wp DQoJCQkJY29kZSA9ICUnDQoJCQkJCWRlZiAje3N5bWJvbH0oKmFyZ3MpDQoJ CQkJCQljYXNlIGFyZ3MubGVuZ3RoJw0KCQkJCTAudXB0byhtYXhfYXJpdHkp IHsgfHh8DQoJCQkJCXN5bSA9IGZpbmRfc2ltaWxhcl9zeW1ib2woc3ltYm9s LCB4KTsNCgkJCQkJaWYgKHN5bSAhPSBuaWwpDQoJCQkJCQljb2RlID0gY29k ZSArICUnDQoJCQkJCQl3aGVuICN7eH0NCgkJCQkJCQlpZiBibG9ja19naXZl bj8NCgkJCQkJCQkJI3tzeW19KCphcmdzKSB7IHwqYmFyZ3N8IHlpZWxkICpi YXJncyB9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCQkje3N5bX0oKmFyZ3MpDQoJ CQkJCQkJZW5kJw0KCQkJCQllbmQNCgkJCQl9DQoJCQkJDQoJCQkJY29kZSA9 IGNvZGUgKyAlJw0KCQkJCQkJZWxzZQ0KCQkJCQkJCXJhaXNlIE5hbWVFcnJv ciwgIm5vIG1ldGhvZCBzaW1pbGFyIHRvIFwnI3tzeW1ib2x9XCcgZm91bmQg Zm9yIFwje2FyZ3MubGVuZ3RofSBhcmdzIg0KCQkJCQkJZW5kDQoJCQkJCWVu ZCcNCg0KCQkJCSNwdXRzIGNvZGUNCg0KCQkJCXB1dHMgImRlZmluaW5nIG1l dGhvZCBmb3IgI3tzeW1ib2x9Ig0KCQkJCXNlbGYuY2xhc3MuY2xhc3NfZXZh bCBjb2RlDQoJCQllbmQNCgkJCQ0KCQkJcmV0dXJuIHNlbGYuc2VuZChzeW1i b2wsICphcmdzKSB7IHwqYmFyZ3N8IHlpZWxkICpiYXJncyB9DQoJCWVuZA0K DQoJCXJhaXNlIE5hbWVFcnJvciwgIm5vIG1ldGhvZCBzaW1pbGFyIHRvIGAj e3N5bWJvbH0nIHdpdGggI3thcmdzLmxlbmd0aH0gYXJncyBmb3IgXCIje3Nl bGZ9XCI6I3tzZWxmLmNsYXNzfSINCgllbmQNCg0KCXByaXZhdGUgOmZpbmRf c2ltaWxhcl9zeW1ib2wsIDpiZXN0X21hdGNoDQoNCmVuZA0KDQoNCmNsYXNz IFRlc3QNCg0KCWluY2x1ZGUgQ2xvc2VDYWxsDQoNCglkZWYgc29tZU1ldGhv ZChhcmcxKQ0KCQlyZXR1cm4gIkNhbGxlZCBzb21lTWV0aG9kIHdpdGggYXJn czogJyN7YXJnMX0nIg0KCWVuZA0KDQoJZGVmIHNvbWVNZXRob2QyKGFyZzEp DQoJCXJldHVybiAiQ2FsbGVkIFNvbWVNZXRob2QyIHdpdGggYXJnczogJyN7 YXJnMX0nIg0KCWVuZA0KDQoJZGVmIHNvbWVNZXRob2QzKGFyZzEsIGFyZzIp DQoJCXJldHVybiAiQ2FsbGVkIHNvbWVNZXRob2QzIHdpdGggYXJnczogJyN7 YXJnMX0nICcje2FyZzJ9JyINCgllbmQNCg0KZW5kDQoNCmNsYXNzIE9iamVj dA0KCWluY2x1ZGUgQ2xvc2VDYWxsDQplbmQNCg0KdGVzdCA9IFRlc3QubmV3 DQoNCg0KcHV0cyB0ZXN0LnNvbWVtZXRob2QoJ2EnLCAnYicpDQoNCnB1dHMg dGVzdC5zb21lbWV0aG9kKCdhJykNCg0KcHV0cyB0ZXN0LnNvbWVtZXRob2Qy KCdiJykNCg0KcHV0cyB0ZXN0LnNvbWVtZXRob2QoJ2EnLCAnYicsICdjJykN Cg0K --1394090772-989359847-1071506166963 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="FuzzyMatch.rb" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.LNX.4.44.0312150836061.3963 / stack.f00f.net> Content-Description: Content-Disposition: attachment; filename="FuzzyMatch.rb" Y2xhc3MgU3RyaW5nDQ0KICAgICM9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQ0KICAgICMgKiAqRnVuY3Rpb24qOiBBIGZ1enp5IG1hdGNoaW5nIG1l Y2hhbmlzbSAoc3RpbGwgYSBiaXQgcm91Z2gpICAgICAgICAgICAjDQ0KICAg ICMgQW55IHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCAgYXJlIHdlbGNv bWUuICAgICAgICAgICAgICAgICAgICAgICAgICAjDQ0KICAgICMgKiAqVXNh Z2UqICAgOiA8dHQ+ICAiQWxleHNhbmRlciIuZnV6enlfbWF0Y2goICJBbGVr c2FuZGVyIiApICA8L3R0PiAgICAjDQ0KICAgICMgKiAqQXJncyogICAgOiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjDQ0KICAgICMgICAtICtzdHJfaW4rIC0+IFRoZSBzdHJp bmcgdG8gY29tcGFyZSBhZ2FpbnN0ICAgICAgICAgICAgICAgICAgICAgICAg ICAjDQ0KICAgICMgKiAqUmV0dXJucyogOiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjDQ0KICAg ICMgICAtICtzY29yZSsgLT4gQSBzY29yZSBmcm9tIDAtMSwgYmFzZWQgb24g dGhlIG51bWJlciBvZiBzaGFyZWQgZWRnZXMgICAjDQ0KICAgICMgKG1hdGNo ZXMgb2YgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIG9mIGxlbmd0aCAyIG9y IG1vcmUpICAgICAgICAgICAgICAjDQ0KICAgICMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjDQ0KICAgICMgKiAqVGhyb3dzKiA6ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjDQ0KICAgICMgICAtICtub25lKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjDQ0KICAg ICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQ0KICAgICMgVGhlIHdh eSB0aGlzIHdvcmtzOg0NCiAgICAjICAgQ29udmVydHMgZWFjaCBzdHJpbmcg aW50byBhICJncmFwaCBsaWtlIiBvYmplY3QsIHdpdGggZWRnZXMNDQogICAg IyAgICAgICAiYWxleHNhbmRlciIgLSA+IFsgYWxleHNhbmRlciwgYWxleHNh bmQsIGFsZXhzYW4gLi4uIGxleHNhbmQgLi4uIHNhbiAuLi4gYW4sIGV0YyBd DQ0KICAgICMgICAgICAgImFsZWtzYW5kZXIiIC0gPiBbIGFsZWtzYW5kZXIs IGFsZWtzYW5kIC4uLiBldGMuIF0NDQogICAgIyAgIFBlcmZvcm0gbWF0Y2gs IHRoZW4gcmVtb3ZlIGFueSBzdWJzZXRzIGZyb20gdGhpcyBtYXRjaGVkIHNl dCAoaS5lLiBhIGhpdCBvbiAic2FuIiBpcyBhIHN1YnNldCBvZiBhIGhpdCBv biAic2FuZGVyIikNDQogICAgIyAgICAgICBBYm92ZSBleGFtcGxlLCBvbmNl IHJlZHVjZWQgLT4gWyBhbGUsIHNhbmRlciBdDQ0KICAgICMgICBTZWUncyBo b3cgbWFueSBvZiB0aGUgbWF0Y2hlcyByZW1haW4sIGFuZCBjYWxjdWxhdGVz IGEgc2NvcmUgYmFzZWQgDQ0KICAgICMgICBPbiBob3cgbWFueSBtYXRjaGVz LCB0aGVpciBsZW5ndGgsIGFuZCBjb21wYXJlIHRvIHRoZSBsZW5ndGggb2Yg dGhlIGxhcmdlciBvZiB0aGUgdHdvIHdvcmRzDQ0KDQ0KICAgIGRlZiBmdXp6 eV9tYXRjaCggc3RyX2luICkNDQogICAgICAgIHJldHVybiAwIGlmIHN0cl9p biA9PSBuaWwNDQogICAgICAgIHJldHVybiAxIGlmIHNlbGYgPT0gc3RyX2lu DQ0KICAgICAgICAjIE1ha2UgYSBncmFwaCBvZiBlYWNoIHdvcmQgKG9rYXks IHNvIGl0cyBub3QgYSB0cnVlIGdyYXBoLCBidXQgaXMgc2ltaWxhcikNDQog ICAgICAgIGdyYXBoX0EgPSBBcnJheS5uZXcNDQogICAgICAgIGdyYXBoX0Ig PSBBcnJheS5uZXcNDQogICAgICAgIA0NCiAgICAgICAgIyAiZ3JhcGgiIHNl bGYNDQogICAgICAgIGxhc3QgPSBzZWxmLmxlbmd0aA0NCiAgICAgICAgKDAu Lmxhc3QpLmVhY2h7IHxmZnwNDQogICAgICAgICAgICBsb2MgID0gc2VsZi5s ZW5ndGgNDQogICAgICAgICAgICBicmVhayBpZiBmZiA9PSBsYXN0IC0gMQ0N CiAgICAgICAgICAgIHdvcmRCID0gKDEuLihsYXN0LTEpKS50b19hLnJldmVy c2UhDQ0KCQkJCWlmICh3b3JkQiAhPSBuaWwpDQ0KCQkJCQl3b3JkQi5lYWNo eyB8c3N8DQ0KCQkJCQkJIGJyZWFrIGlmIHNzID09IGZmDQ0KCQkJCQkJIGdy YXBoX0EucHVzaCggIiN7c2VsZltmZi4uc3NdfSIgKQ0NCgkJCQkJfQ0NCgkJ CQllbmQNDQogICAgICAgIH0NDQogICAgICAgIA0NCiAgICAgICAgIyAiZ3Jh cGgiIGlucHV0IHN0cmluZw0NCiAgICAgICAgbGFzdCA9IHN0cl9pbi5sZW5n dGgNDQogICAgICAgICgwLi5sYXN0KS5lYWNoeyB8ZmZ8DQ0KICAgICAgICAg ICAgbG9jICA9IHN0cl9pbi5sZW5ndGgNDQogICAgICAgICAgICBicmVhayBp ZiBmZiA9PSBsYXN0IC0gMQ0NCiAgICAgICAgICAgIHdvcmRCID0gKDEuLihs YXN0LTEpKS50b19hLnJldmVyc2UhDQ0KICAgICAgICAgICAgd29yZEIuZWFj aHsgfHNzfA0NCiAgICAgICAgICAgICAgICBicmVhayBpZiBzcyA9PSBmZg0N CiAgICAgICAgICAgICAgICBncmFwaF9CLnB1c2goICIje3N0cl9pbltmZi4u c3NdfSIgKQ0NCiAgICAgICAgICAgIH0NDQogICAgICAgIH0NDQogICAgICAg IA0NCiAgICAgICAgIyBjb3VudCBob3cgbWFueSBvZiB0aGVzZSAiZ3JhcGgg ZWRnZXMiIHdlIGhhdmUgdGhhdCBhcmUgdGhlIHNhbWUNDQogICAgICAgIG1h dGNoZXMgPSBBcnJheS5uZXcNDQogICAgICAgIGdyYXBoX0EuZWFjaHsgfGFh fA0NCiAgICAgICAgICAgIG1hdGNoZXMucHVzaCggYWEgKSBpZiggZ3JhcGhf Qi5pbmNsdWRlPyggYWEgKSApDQ0KICAgICAgICB9DQ0KDQ0KICAgICAgICBt YXRjaGVzLnNvcnQheyB8eCx5fCB4Lmxlbmd0aCA8PT4geS5sZW5ndGggfSAg IyBGb3IgZWxpbWluYXRpbmcgc3Vic2V0cywgd2Ugd2FudCB0byBzdGFydCB3 aXRoIHRoZSBzbWFsbGVzdCBoaXRzDQ0KDQ0KICAgICAgICAjIGVsaW1pbmF0 ZSBhbnkgc3Vic2V0cw0NCiAgICAgICAgbWNsb25lID0gbWF0Y2hlcy5kdXAN DQogICAgICAgIG1jbG9uZS5lYWNoX2luZGV4IHsgfGlpfA0NCiAgICAgICAg ICAgIHJlZyA9IFJlZ2V4cC5jb21waWxlKCBtY2xvbmVbaWldICkNDQogICAg ICAgICAgICBjb3VudCA9IDAuMA0NCiAgICAgICAgICAgIG1hdGNoZXMuZWFj aHsgfHh4fA0NCiAgICAgICAgICAgICAgICBjb3VudCArPSAxIGlmIHh4ID1+ IHJlZw0NCiAgICAgICAgICAgIH0NDQogICAgICAgICAgICBtYXRjaGVzLmRl bGV0ZShtY2xvbmVbaWldKSBpZiBjb3VudCA+IDENDQogICAgICAgIH0NDQog ICAgICAgIA0NCiAgICAgICAgc2NvcmUgPSAwLjANDQogICAgICAgIG1hdGNo ZXMuZWFjaHsgfG1tfCBzY29yZSArPSBtbS5sZW5ndGggfQ0NCiAgICAgICAg DQ0KICAgICAgICBzZWxmLmxlbmd0aCA+IHN0cl9pbi5sZW5ndGggPyBsYXJn ZXN0ID0gc2VsZi5sZW5ndGggOiBsYXJnZXN0ID0gc3RyX2luLmxlbmd0aCAg ICAgICAgDQ0KICAgICAgICByZXR1cm4gc2NvcmUvbGFyZ2VzdA0NCiAgICBl bmQNDQplbmQNDQo--1394090772-989359847-1071506166963-- --1394090772-989359847-1071506166963--