Module: Logged::Subscriptions

Included in:
Logged
Defined in:
lib/logged/subscriptions.rb

Overview

Railtie for logged

Instance Method Summary collapse

Instance Method Details

#rails_subscriber(component) ⇒ Object

try to guess and get rails log subscriber by component name



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/logged/subscriptions.rb', line 14

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) ⇒ Object

register log subscriber with logged



42
43
44
45
46
# 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) ⇒ Object

remove rails log subscriber by component name



5
6
7
8
9
10
11
# File 'lib/logged/subscriptions.rb', line 5

def remove_rails_subscriber(component)
  subscriber = rails_subscriber(component)

  return unless subscriber

  unsubscribe(component, subscriber)
end

#require_rails_subscribersObject

require log subscribers for rails frameworks



49
50
51
52
53
54
# 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) ⇒ Object

unsubscribe a subscriber from a component



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/logged/subscriptions.rb', line 29

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|
      if listener.instance_variable_get('@delegate') == subscriber
        ActiveSupport::Notifications.unsubscribe listener
      end
    end
  end
end