aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/body_parts/concurrent_block.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_view/body_parts/concurrent_block.rb')
-rw-r--r--actionpack/lib/action_view/body_parts/concurrent_block.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/body_parts/concurrent_block.rb b/actionpack/lib/action_view/body_parts/concurrent_block.rb
new file mode 100644
index 0000000000..28a3a3bf4d
--- /dev/null
+++ b/actionpack/lib/action_view/body_parts/concurrent_block.rb
@@ -0,0 +1,25 @@
+module ActionView
+ module BodyParts
+ class ConcurrentBlock
+ def initialize(&block)
+ @block = block
+ @body = []
+ start
+ end
+
+ def to_s
+ finish
+ @body.join
+ end
+
+ protected
+ def start
+ @worker = Thread.new { @block.call(@body) }
+ end
+
+ def finish
+ @worker.join if @worker && @worker.alive?
+ end
+ end
+ end
+end