aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-03-19 03:30:01 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2009-03-19 03:31:55 -0700
commit0d5b50ee3a6d65471f311980b9b6e49fe4b4a021 (patch)
tree917f49063f4ea60ed3edb7532435c9fcd002a18a /actionpack
parent6335f5d5186dfb97453dfa1a55aabe4c6f3962b0 (diff)
downloadrails-0d5b50ee3a6d65471f311980b9b6e49fe4b4a021.tar.gz
rails-0d5b50ee3a6d65471f311980b9b6e49fe4b4a021.tar.bz2
rails-0d5b50ee3a6d65471f311980b9b6e49fe4b4a021.zip
pluginize concurrent block body part
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_view/base.rb4
-rw-r--r--actionpack/lib/action_view/body_parts/concurrent_block.rb25
-rw-r--r--actionpack/test/template/body_parts_test.rb80
3 files changed, 2 insertions, 107 deletions
diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb
index 3bbd2ca530..9c0134e7f7 100644
--- a/actionpack/lib/action_view/base.rb
+++ b/actionpack/lib/action_view/base.rb
@@ -288,12 +288,12 @@ module ActionView #:nodoc:
# Access the current template being rendered.
# Returns a ActionView::Template object.
def template
- Thread.current[:_current_render]
+ @_current_render
end
def template=(template) #:nodoc:
@_first_render ||= template
- Thread.current[:_current_render] = template
+ @_current_render = template
end
def with_template(current_template)
diff --git a/actionpack/lib/action_view/body_parts/concurrent_block.rb b/actionpack/lib/action_view/body_parts/concurrent_block.rb
deleted file mode 100644
index 28a3a3bf4d..0000000000
--- a/actionpack/lib/action_view/body_parts/concurrent_block.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-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
diff --git a/actionpack/test/template/body_parts_test.rb b/actionpack/test/template/body_parts_test.rb
index 209f6ec1ff..4c82b75cdc 100644
--- a/actionpack/test/template/body_parts_test.rb
+++ b/actionpack/test/template/body_parts_test.rb
@@ -1,5 +1,4 @@
require 'abstract_unit'
-require 'action_view/body_parts/concurrent_block'
class BodyPartsTest < ActionController::TestCase
RENDERINGS = [Object.new, Object.new, Object.new]
@@ -21,82 +20,3 @@ class BodyPartsTest < ActionController::TestCase
assert_equal RENDERINGS.join, @response.body
end
end
-
-class ConcurrentBlockPartTest < ActionController::TestCase
- class TestController < ActionController::Base
- def index
- append_thread_id = lambda do |parts|
- parts << Thread.current.object_id
- parts << '::'
- parts << Time.now.to_i
- sleep 0.1
- end
-
- future_render &append_thread_id
- response.body_parts << '-'
-
- future_render &append_thread_id
- response.body_parts << '-'
-
- future_render do |parts|
- parts << ActionView::BodyParts::ConcurrentBlock.new(&append_thread_id)
- parts << '-'
- parts << ActionView::BodyParts::ConcurrentBlock.new(&append_thread_id)
- end
-
- @performed_render = true
- end
-
- def future_render(&block)
- response.template.punctuate_body! ActionView::BodyParts::ConcurrentBlock.new(&block)
- end
- end
-
- tests TestController
-
- def test_concurrent_threaded_parts
- get :index
-
- elapsed = Benchmark.ms do
- thread_ids = @response.body.split('-').map { |part| part.split('::').first.to_i }
- assert_equal thread_ids.size, thread_ids.uniq.size
- end
- assert (elapsed - 100).abs < 10, elapsed
- end
-end
-
-
-class OpenUriPartTest < ActionController::TestCase
- class OpenUriPart < ActionView::BodyParts::ConcurrentBlock
- def initialize(url)
- url = URI::Generic === url ? url : URI.parse(url)
- super() { |body| body << url.read }
- end
- end
-
- class TestController < ActionController::Base
- def index
- render_url 'http://localhost/foo'
- render_url 'http://localhost/bar'
- render_url 'http://localhost/baz'
- @performed_render = true
- end
-
- def render_url(url)
- url = URI.parse(url)
- def url.read; sleep 0.1; path end
- response.template.punctuate_body! OpenUriPart.new(url)
- end
- end
-
- tests TestController
-
- def test_concurrent_open_uri_parts
- get :index
-
- elapsed = Benchmark.ms do
- assert_equal '/foo/bar/baz', @response.body
- end
- assert (elapsed - 100).abs < 10, elapsed
- end
-end