module ActiveSupport::Notifications

def instrument(name, payload = {})

def instrument(name, payload = {})
  if notifier.listening?(name)
    instrumenter.instrument(name, payload) { yield payload if block_given? }
  else
    yield payload if block_given?
  end
end

def instrumenter

def instrumenter
  InstrumentationRegistry.instance.instrumenter_for(notifier)
end

def publish(name, *args)

def publish(name, *args)
  notifier.publish(name, *args)
end

def subscribe(*args, &block)

def subscribe(*args, &block)
  notifier.subscribe(*args, &block)
end

def subscribed(callback, *args, &block)

def subscribed(callback, *args, &block)
  subscriber = subscribe(*args, &callback)
  yield
ensure
  unsubscribe(subscriber)
end

def unsubscribe(subscriber_or_name)

def unsubscribe(subscriber_or_name)
  notifier.unsubscribe(subscriber_or_name)
end