Module: ActiveSupport::Notifications::Fanout::Subscribers

Defined in:
activesupport/lib/active_support/notifications/fanout.rb

Overview

:nodoc:

Defined Under Namespace

Classes: EventObject, Evented, Matcher, MonotonicTimed, Timed

Class Method Summary collapse

Class Method Details

.new(pattern, listener, monotonic) ⇒ Object



317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
# File 'activesupport/lib/active_support/notifications/fanout.rb', line 317

def self.new(pattern, listener, monotonic)
  subscriber_class = monotonic ? MonotonicTimed : Timed

  if listener.respond_to?(:start) && listener.respond_to?(:finish)
    subscriber_class = Evented
  else
    # Doing this to detect a single argument block or callable
    # like `proc { |x| }` vs `proc { |*x| }`, `proc { |**x| }`,
    # or `proc { |x, **y| }`
    procish = listener.respond_to?(:parameters) ? listener : listener.method(:call)

    if procish.arity == 1 && procish.parameters.length == 1
      subscriber_class = EventObject
    end
  end

  subscriber_class.new(pattern, listener)
end