diff --git a/activesupport/lib/active_support/notifications.rb b/activesupport/lib/active_support/notifications.rb index bf668964f5..9eae3bebe2 100644 --- a/activesupport/lib/active_support/notifications.rb +++ b/activesupport/lib/active_support/notifications.rb @@ -16,8 +16,8 @@ module ActiveSupport # # @events = [] # - # ActiveSupport::Notifications.subscribe do |event| - # @events << event + # ActiveSupport::Notifications.subscribe do |*args| + # @events << ActiveSupport::Notifications::Event.new(*args) # end # # ActiveSupport::Notifications.instrument(:render, :extra => :information) do @@ -25,7 +25,6 @@ module ActiveSupport # end # # event = @events.first - # event.class #=> ActiveSupport::Notifications::Event # event.name #=> :render # event.duration #=> 10 (in miliseconds) # event.result #=> "Foo" @@ -45,7 +44,7 @@ module ActiveSupport mattr_accessor :queue class << self - delegate :instrument, :transaction_id, :generate_id, :to => :instrumenter + delegate :instrument, :transaction_id, :transaction, :to => :instrumenter def instrumenter Thread.current[:notifications_instrumeter] ||= Instrumenter.new(publisher) @@ -118,15 +117,15 @@ module ActiveSupport end class Event - attr_reader :name, :time, :end, :thread_id, :result, :payload + attr_reader :name, :time, :end, :transaction_id, :result, :payload - def initialize(name, start, ending, result, thread_id, payload) - @name = name - @payload = payload.dup - @time = start - @thread_id = thread_id - @end = ending - @result = result + def initialize(name, start, ending, result, transaction_id, payload) + @name = name + @payload = payload.dup + @time = start + @transaction_id = transaction_id + @end = ending + @result = result end def duration diff --git a/activesupport/test/notifications_test.rb b/activesupport/test/notifications_test.rb index b763b740af..9175c8f26e 100644 --- a/activesupport/test/notifications_test.rb +++ b/activesupport/test/notifications_test.rb @@ -124,6 +124,26 @@ class NotificationsMainTest < Test::Unit::TestCase assert_equal Hash[:payload => "notifications"], @events.last.payload end + def test_subscribed_in_a_transaction + @another = [] + + ActiveSupport::Notifications.subscribe("cache") do |*args| + @another << ActiveSupport::Notifications::Event.new(*args) + end + + ActiveSupport::Notifications.instrument(:cache){ 1 } + ActiveSupport::Notifications.transaction do + ActiveSupport::Notifications.instrument(:cache){ 1 } + end + ActiveSupport::Notifications.instrument(:cache){ 1 } + + sleep 0.1 + + before, during, after = @another.map {|e| e.transaction_id } + assert_equal before, after + assert_not_equal before, during + end + def test_subscriber_with_pattern @another = []