--Boundary_(ID_ad08IDwueji2uUC1qqOLuw)
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT

This is my solution.  Probably my fastest and shortest ruby quiz 
solution, but no less fun!  Props to the creator of this quiz.

In technicolor glory: http://pastie.caboo.se/34720
Also attached.  And pasted below.

class Object
	def method_missing(method, *args, &blk)
		# Gather all possible methods it could be.
		possibleMethods  elf.methods.select {|x| x 
/^#{Regexp.escape(method.to_s)}/ }
		
		case possibleMethods.size
		# No matching method.
		when 0
			raise NoMethodError.new("undefined method `#{method}' for 
#{self.inspect}:#{self.class.name}")
		
		# One matching method, call it.
		when 1
			method  ossibleMethods.first
			self.send(method, *args, &blk)
		
		# Multiple possibilities, return an array of the possibilities.
		else
			possibleMethods
		end
	end
end

Ruby Quiz wrote:
> The three rules of Ruby Quiz:
> 
> 1.  Please do not post any solutions or spoiler discussion for this quiz until
> 48 hours have passed from the time on this message.
> 
> 2.  Support Ruby Quiz by submitting ideas as often as you can:
> 
> http://www.rubyquiz.com/
> 
> 3.  Enjoy!
> 
> Suggestion:  A [QUIZ] in the subject of emails about the problem helps everyone
> on Ruby Talk follow the discussion.  Please reply to the original quiz message,
> if you can.
> 
> --------------------
> 
> by Robert Dober
> 
> Command Line Interfaces very often support command abbreviations The purpose of
> this quiz is to automatically dispatch to methods on unambiguous abbreviations,
> ask the user for clarification in case of ambiguous abbreviations and raise a
> NoMethodError in case of an abbreviation that cannot be matched to any command.
> 
> Behavior of other methods defined in a class shall not be altered.
> 
> Be creative about the interface and about behavior. I have OTOH defined a small
> test suite that makes assumptions about the interface and behavior. But the test
> suite is only there for your convenience.
> 
> What is said below applies to the test suite and shall in no way inhibit any
> alternative ideas.
> 
> 	class Mine
> 	  abbrev :step, :next, :stop
> 	  abbrev :exit
> 	end
> 	
> 	Mine.new.e  # should resolve to exit
> 	Mine.new.st # should prompt the user 
> 	Mine.new.a  # should still raise a NoMethodError
> 
> Abbreviation targets themselves are not expanded.
> 
> 	class Nine
> 	  abbrev  :hash
> 	  abbrev  :has
> 	end
> 	
> 	Nine.new.ha  # [:hash, :has] 
> 	Nine.new.has # NoMethodError
> 	
> 	class Nine
> 	  def has; 42; end
> 	end
> 	Nine.new.has # 42
> 
> In order to allow for automated testing the test code shall not prompt the user
> in case of an ambiguous abbreviation but return an array containing all (and
> only all) possible completions as symbols. Note that the test suite sets the
> global variable $TESTING to a true value for your convenience.
> 
> 	http://rubyquiz.com/test-abbrev.rb
> 
> 

--Boundary_(ID_ad08IDwueji2uUC1qqOLuw)
Content-type: application/x-ruby; name=method_completion.rb
Content-transfer-encoding: base64
Content-disposition: inline; filename=method_completion.rb

Y2xhc3MgT2JqZWN0CglkZWYgbWV0aG9kX21pc3NpbmcobWV0aG9kLCAqYXJncywgJmJsaykK
CQkjIEdhdGhlciBhbGwgcG9zc2libGUgbWV0aG9kcyBpdCBjb3VsZCBiZS4KCQlwb3NzaWJs
ZU1ldGhvZHMgPSBzZWxmLm1ldGhvZHMuc2VsZWN0IHt8eHwgeCA9fiAvXiN7UmVnZXhwLmVz
Y2FwZShtZXRob2QudG9fcyl9LyB9CgkJCgkJY2FzZSBwb3NzaWJsZU1ldGhvZHMuc2l6ZQoJ
CSMgTm8gbWF0Y2hpbmcgbWV0aG9kLgoJCXdoZW4gMAoJCQlyYWlzZSBOb01ldGhvZEVycm9y
Lm5ldygidW5kZWZpbmVkIG1ldGhvZCBgI3ttZXRob2R9JyBmb3IgI3tzZWxmLmluc3BlY3R9
OiN7c2VsZi5jbGFzcy5uYW1lfSIpCgkJCgkJIyBPbmUgbWF0Y2hpbmcgbWV0aG9kLCBjYWxs
IGl0LgoJCXdoZW4gMQoJCQltZXRob2QgPSBwb3NzaWJsZU1ldGhvZHMuZmlyc3QKCQkJc2Vs
Zi5zZW5kKG1ldGhvZCwgKmFyZ3MsICZibGspCgkJCgkJIyBNdWx0aXBsZSBwb3NzaWJpbGl0
aWVzLCByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIHBvc3NpYmlsaXRpZXMuCgkJZWxzZQoJCQlw
b3NzaWJsZU1ldGhvZHMKCQllbmQKCWVuZAplbmQ-Boundary_(ID_ad08IDwueji2uUC1qqOLuw)--