Sha256: e740ad83dad0ce8aa0aba7bc5751c94f8c59a1909a8c0f37336d74eb5186fba8

Contents?: true

Size: 1.64 KB

Versions: 2

Compression:

Stored size: 1.64 KB

Contents

require 'hickory/logger'
require 'hickory/version'

module Hickory
  module_function

  def initialize_canonical_logs(app)
    require 'hickory/ext/rails/rack/logger'

    self.application = app
    Hickory.ignore_if  = config.ignore_if

    Hickory.remove_existing_log_subscriptions
    Hickory::LogSubscribers::ActionController.attach_to :action_controller
    Hickory::LogSubscribers::ActionMailer.attach_to :action_mailer
    Hickory::LogSubscribers::ActiveJob.attach_to :active_job
  end

  def application
    @@application
  end

  def application=(app)
    @@application = app
  end

  def ignore_if
    @@ignore_if
  end

  def ignore_if=(check)
    @@ignore_if = check
  end

  def config
    application.config.hickory
  end

  def remove_existing_log_subscriptions
    ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
      case subscriber
      when ActionView::LogSubscriber
        unsubscribe(:action_view, subscriber)
      when ActionController::LogSubscriber
        unsubscribe(:action_controller, subscriber)
      when ActionMailer::LogSubscriber
        unsubscribe(:action_mailer, subscriber)
      when ActiveJob::Logging::LogSubscriber
        unsubscribe(:active_job, subscriber)
      end
    end
  end

  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
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hickory-0.1.1 lib/hickory.rb
hickory-0.1.0 lib/hickory.rb