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