The three rules of Ruby Q.:
-
Please do not post any solutions or spoiler discussion for this quiz
until
48 hours have passed from the time on this message. -
Support Ruby Q. by submitting ideas as often as you can:
- Enjoy!
Suggestion: A [QUIZ] in the subject of emails about the problem helps
everyone
on Ruby T. follow the discussion. Please reply to the original quiz
message,
if you can.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
by Robert D.
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.