module Logged::Subscriptions

Railtie for logged

Public Instance Methods

rails_subscriber(component) click to toggle source

try to guess and get rails log subscriber by component name

# File lib/logged/subscriptions.rb, line 16
def rails_subscriber(component)
  class_name = "::#{component.to_s.camelize}::LogSubscriber"

  return unless Object.const_defined?(class_name)

  clazz = class_name.constantize

  ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
    return subscriber if subscriber.is_a?(clazz)
  end

  nil
end
register(component, subscriber) click to toggle source

register log subscriber with logged

# File lib/logged/subscriptions.rb, line 42
def register(component, subscriber)
  return if @subscribers[component].include?(subscriber)

  @subscribers[component] << subscriber
end
remove_rails_subscriber(component) click to toggle source

remove rails log subscriber by component name

# File lib/logged/subscriptions.rb, line 7
def remove_rails_subscriber(component)
  subscriber = rails_subscriber(component)

  return unless subscriber

  unsubscribe(component, subscriber)
end
require_rails_subscribers() click to toggle source

require log subscribers for rails frameworks

# File lib/logged/subscriptions.rb, line 49
def require_rails_subscribers
  require 'logged/log_subscriber/action_controller' if defined?(ActionController)
  require 'logged/log_subscriber/action_view'       if defined?(ActionView)
  require 'logged/log_subscriber/active_record'     if defined?(ActiveRecord)
  require 'logged/log_subscriber/action_mailer'     if defined?(ActionMailer)
end
unsubscribe(component, subscriber) click to toggle source

unsubscribe a subscriber from a component

# File lib/logged/subscriptions.rb, line 31
def unsubscribe(component, subscriber)
  events = subscriber.public_methods(false).reject { |method| method.to_s == 'call' }

  events.each do |event|
    ActiveSupport::Notifications.notifier.listeners_for("#{event}.#{component}").each do |listener|
      ActiveSupport::Notifications.unsubscribe listener if listener.instance_variable_get('@delegate') == subscriber
    end
  end
end