# File lib/annoy.rb, line 113
113:   def Annoy.challenge?(msg="Please confirm.", factor=:medium, flavor=:rand, writer=STDOUT, period=nil)
114:     return true unless STDIN.tty? # Humans only!
115:     return true if Annoy.skip?
116:     begin
117:       success = Timeout::timeout(period || @@period) do
118:         flavor = Annoy.get_flavor(flavor)
119:         question, answer = Annoy.question(factor, flavor)
120:         msg = "#{msg} To continue, #{Annoy.verb(flavor)} #{question}: "
121:         #writer.print msg
122:         #if ![:medium, :high, :insane].member?(factor) && flavor == :numeric
123:         #writer.print "(#{answer}) " 
124:         #writer.flush
125:         #end
126:         #response = Annoy.get_response(writer)
127:                 
128:         highline = HighLine.new 
129:         response = highline.ask(msg) { |q| 
130:           q.echo = '*'             # Don't display response
131:           q.overwrite = true       # Erase the question afterwards
132:           q.whitespace = :strip    # Remove whitespace from the response
133:           q.answer_type = Integer  if flavor == :numeric
134:         }
135:         
136:         ret = (response == answer)
137:         writer.puts "Incorrect" unless ret
138:         ret
139:       end
140:     rescue Interrupt
141:       writer.puts $/, "Giving up!"
142:       false
143:     rescue Annoy::GiveUp => ex
144:       writer.puts $/, "Giving up!"
145:       false
146:     rescue Timeout::Error => ex
147:       writer.puts $/, "Times up!"
148:       false
149:     end
150:   end