Module: ActiveSupport::TaggedLogging::Broadcasting

Defined in:
lib/activesupport/tagged_logging/broadcasting.rb

Overview

This module is included in ActiveSupport::BroadcastLogger to enable broadcasting to tagged loggers with equivalent semantics.

Instance Method Summary collapse

Instance Method Details

#tagged(*tags, &block) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/activesupport/tagged_logging/broadcasting.rb', line 7

def tagged(*tags, &block)
  return super unless broadcasts.any? { |logger| logger.respond_to?(:tagged) }

  if block_given?
    # `tagged(...) { |logger| ... }` yields itself to the block
    broadcasts.inject(block) do |block, logger|
      if logger.respond_to?(:tagged)
        proc { logger.tagged(*tags) { block.call(self) } }
      else
        block
      end
    end.call
  else
    # `tagged(...) returns a new logger with the tags pushed
    self.class.new(*broadcasts.map { |logger|
      logger.respond_to?(:tagged) ? logger.tagged(*tags) : logger
    })
  end
end