diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-01-05 18:01:36 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-01-06 19:50:34 -0800 |
commit | 370fb8c7811704ed65384f599b52ac1b6d0c36c9 (patch) | |
tree | ff5024a3d1f507c6e88801f0c8f0c6e154bfe1e2 /t/async_chunk_app.ru | |
parent | 2cb26ba8084cd37996330616b885de1c780d848e (diff) | |
download | rainbows-370fb8c7811704ed65384f599b52ac1b6d0c36c9.tar.gz |
async.callback will be useful with Coolio (and more!) soon, so ensure it works as well as the rest of Rainbows!
Diffstat (limited to 't/async_chunk_app.ru')
-rw-r--r-- | t/async_chunk_app.ru | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/t/async_chunk_app.ru b/t/async_chunk_app.ru new file mode 100644 index 0000000..26b9915 --- /dev/null +++ b/t/async_chunk_app.ru @@ -0,0 +1,44 @@ +# based on async_examples/async_app.ru by James Tucker +class DeferrableChunkBody + include EventMachine::Deferrable + + def call(*body) + body.each do |chunk| + @body_callback.call("#{chunk.size.to_s(16)}\r\n") + @body_callback.call(chunk) + @body_callback.call("\r\n") + end + end + + def each(&block) + @body_callback = block + end + + def finish + @body_callback.call("0\r\n\r\n") + end +end + +class AsyncChunkApp + def call(env) + body = DeferrableChunkBody.new + body.callback { body.finish } + headers = { + 'Content-Type' => 'text/plain', + 'Transfer-Encoding' => 'chunked', + } + EM.next_tick { + env['async.callback'].call([ 200, headers, body ]) + } + EM.add_timer(1) { + body.call "Hello " + + EM.add_timer(1) { + body.call "World #{env['PATH_INFO']}\n" + body.succeed + } + } + nil + end +end +run AsyncChunkApp.new |