instrumenter should be accessible from ActiveSupport::Notifications.

This commit is contained in:
José Valim 2010-01-06 22:23:29 +01:00
parent 0c2d933f36
commit 74f6ccea20
2 changed files with 16 additions and 15 deletions

View File

@ -44,11 +44,16 @@ module ActiveSupport
class << self
attr_writer :notifier
delegate :publish, :subscribe, :instrument, :to => :notifier
delegate :publish, :subscribe, :to => :notifier
delegate :instrument, :to => :instrumenter
def notifier
@notifier ||= Notifier.new
end
def instrumenter
Thread.current[:"instrumentation_#{notifier.object_id}"] ||= Instrumenter.new(notifier)
end
end
class Notifier
@ -67,13 +72,6 @@ module ActiveSupport
def wait
@queue.wait
end
delegate :instrument, :to => :current_instrumenter
private
def current_instrumenter
Thread.current[:"instrumentation_#{object_id}"] ||= Notifications::Instrumenter.new(self)
end
end
end
end

View File

@ -5,7 +5,8 @@ module Notifications
def setup
Thread.abort_on_exception = true
@notifier = ActiveSupport::Notifications::Notifier.new
ActiveSupport::Notifications.notifier = nil
@notifier = ActiveSupport::Notifications.notifier
@events = []
@notifier.subscribe { |*args| @events << event(*args) }
end
@ -82,17 +83,19 @@ module Notifications
end
class InstrumentationTest < TestCase
delegate :instrument, :to => ActiveSupport::Notifications
def test_instrument_returns_block_result
assert_equal 2, @notifier.instrument(:awesome) { 1 + 1 }
assert_equal 2, instrument(:awesome) { 1 + 1 }
end
def test_instrumenter_exposes_its_id
assert_equal 20, ActiveSupport::Notifications::Instrumenter.new(@notifier).id.size
assert_equal 20, ActiveSupport::Notifications.instrumenter.id.size
end
def test_nested_events_can_be_instrumented
@notifier.instrument(:awesome, :payload => "notifications") do
@notifier.instrument(:wot, :payload => "child") do
instrument(:awesome, :payload => "notifications") do
instrument(:wot, :payload => "child") do
1 + 1
end
@ -112,7 +115,7 @@ module Notifications
def test_instrument_publishes_when_exception_is_raised
begin
@notifier.instrument(:awesome, :payload => "notifications") do
instrument(:awesome, :payload => "notifications") do
raise "OMG"
end
flunk
@ -127,7 +130,7 @@ module Notifications
end
def test_event_is_pushed_even_without_block
@notifier.instrument(:awesome, :payload => "notifications")
instrument(:awesome, :payload => "notifications")
drain
assert_equal 1, @events.size