65: def waiter(duration=2, max=240, logger=STDOUT, msg=nil, bells=0, &check)
66:
67: raise "The waiter needs a block!" unless check
68: duration = 1 if duration < 1
69: max = duration*2 if max < duration
70: dot = '.'
71: begin
72: if msg && logger
73: logger.print msg
74: logger.flush
75: end
76: Timeout::timeout(max) do
77: while !check.call
78: sleep duration
79: logger.print dot if logger.respond_to?(:print)
80: logger.flush if logger.respond_to?(:flush)
81: end
82: end
83: rescue Timeout::Error => ex
84: retry if Annoy.pose_question(" Keep waiting?\a ", /yes|y|ya|sure|you bet!/i, logger)
85: return false
86: end
87:
88: if msg && logger
89: logger.puts
90: logger.flush
91: end
92:
93: Rudy::Utils.bell(bells, logger)
94: true
95: end