From: Michael Fellinger Date: 2007-01-22T02:31:25+09:00 Subject: Re: [QUIZ] Method Auto Completion (#110) On 1/19/07, 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 > > My Solution doesn't pass all tests, since i think that when a method :aa is defined it should offer completion from :a to :aa (even when the method doesn't exist in the first place but is defined later on) http://pastie.caboo.se/34631 It's nothing fancy, just a quick 15 minutes-hack, was fun though :) ^manveru