module RailsSemanticLogger

Constants

VERSION

Public Class Methods

swap_subscriber(old_class, new_class, notifier) click to toggle source

Swap an existing subscriber with a new one

# File lib/rails_semantic_logger.rb, line 43
def self.swap_subscriber(old_class, new_class, notifier)
  subscribers = ActiveSupport::LogSubscriber.subscribers.select { |s| s.is_a?(old_class) }
  subscribers.each { |subscriber| unattach(subscriber) }

  new_class.attach_to(notifier)
end

Private Class Methods

subscriber_patterns(subscriber) click to toggle source
# File lib/rails_semantic_logger.rb, line 62
def self.subscriber_patterns(subscriber)
  if subscriber.patterns.respond_to?(:keys)
    subscriber.patterns.keys
  else
    subscriber.patterns
  end
end
unattach(subscriber) click to toggle source
# File lib/rails_semantic_logger.rb, line 50
def self.unattach(subscriber)
  subscriber_patterns(subscriber).each do |pattern|
    ActiveSupport::Notifications.notifier.listeners_for(pattern).each do |sub|
      next unless sub.instance_variable_get(:@delegate) == subscriber

      ActiveSupport::Notifications.unsubscribe(sub)
    end
  end

  ActiveSupport::LogSubscriber.subscribers.delete(subscriber)
end