test_isolate: bump versions and simplify
[rainbows.git] / t / async_chunk_app.ru
blob26b9915842a86d77b8f1626c159919a1fdc89bd6
1 # based on async_examples/async_app.ru by James Tucker
2 class DeferrableChunkBody
3   include EventMachine::Deferrable
5   def call(*body)
6     body.each do |chunk|
7       @body_callback.call("#{chunk.size.to_s(16)}\r\n")
8       @body_callback.call(chunk)
9       @body_callback.call("\r\n")
10     end
11   end
13   def each(&block)
14     @body_callback = block
15   end
17   def finish
18     @body_callback.call("0\r\n\r\n")
19   end
20 end
22 class AsyncChunkApp
23   def call(env)
24     body = DeferrableChunkBody.new
25     body.callback { body.finish }
26     headers = {
27       'Content-Type' => 'text/plain',
28       'Transfer-Encoding' => 'chunked',
29     }
30     EM.next_tick {
31       env['async.callback'].call([ 200, headers, body ])
32     }
33     EM.add_timer(1) {
34       body.call "Hello "
36       EM.add_timer(1) {
37         body.call "World #{env['PATH_INFO']}\n"
38         body.succeed
39       }
40     }
41     nil
42   end
43 end
44 run AsyncChunkApp.new