module ActiveSupport::Notifications::Fanout::Subscribers

def self.new(pattern, listener)

:nodoc:
def self.new(pattern, listener)
  subscriber_class = Timed
  if listener.respond_to?(:start) && listener.respond_to?(:finish)
    subscriber_class = Evented
  else
    # Doing all this to detect a block like `proc { |x| }` vs
    # `proc { |*x| }` or `proc { |**x| }`
    if listener.respond_to?(:parameters)
      params = listener.parameters
      if params.length == 1 && params.first.first == :opt
        subscriber_class = EventObject
      end
    end
  end
  wrap_all pattern, subscriber_class.new(pattern, listener)
end