1require 'timeout'
2
3def progress(n = 5)
4  n.times {|i| print i; STDOUT.flush; sleep 1; i+= 1}
5  puts "never reach"
6end
7
8p timeout(5) {
9  45
10}
11p timeout(5, TimeoutError) {
12  45
13}
14p timeout(nil) {
15  54
16}
17p timeout(0) {
18  54
19}
20begin
21  timeout(5) {progress}
22rescue => e
23  puts e.message
24end
25begin
26  timeout(3) {
27    begin
28      timeout(5) {progress}
29    rescue => e
30      puts "never reach"
31    end
32  }
33rescue => e
34  puts e.message
35end
36class MyTimeout < StandardError
37end
38begin
39  timeout(2, MyTimeout) {progress}
40rescue MyTimeout => e
41  puts e.message
42end
43