Sha256: f76b34d3ec9a2310ae6715f973e2fd1592d0f1de37ab79820a87b89dae9cda05

Contents?: true

Size: 1.64 KB

Versions: 2

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true
require 'active_support/subscriber'
require 'as_deprecation_tracker/writer'

module ASDeprecationTracker
  # Receives deprecation.rails events via ActiveSupport::Notifications
  class Receiver < ::ActiveSupport::Subscriber
    def initialize
      super
      @event_queue = []
    end

    def deprecation(event)
      @event_queue << event
      process_queue if ASDeprecationTracker.running?
    end

    def process_queue
      process_event(@event_queue.pop) until @event_queue.empty?
    end

    def process_event(event)
      return if ASDeprecationTracker.whitelist.matches?(event.payload)

      message = event.payload[:message]
      callstack = event.payload[:callstack].map(&:to_s)
      if ENV['AS_DEPRECATION_RECORD'].present?
        write_deprecation(message, callstack)
      else
        raise_deprecation(message, callstack)
      end
    end

    private

    def write_deprecation(message, callstack)
      writer = ASDeprecationTracker::Writer.new(whitelist_file)
      entry = writer.add(message, callstack)
      writer.write_file
      ASDeprecationTracker.whitelist.add(entry.symbolize_keys)
    end

    def whitelist_file
      root = if ENV['AS_DEPRECATION_WHITELIST'].present?
               File.expand_path(ENV['AS_DEPRECATION_WHITELIST'])
             else
               Rails.root
             end

      if File.directory?(root)
        File.join(root, ASDeprecationTracker.config.whitelist_file)
      else
        root
      end
    end

    def raise_deprecation(message, callstack)
      e = ActiveSupport::DeprecationException.new(message)
      e.set_backtrace(callstack)
      raise e
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
as_deprecation_tracker-1.4.1 lib/as_deprecation_tracker/receiver.rb
as_deprecation_tracker-1.4.0 lib/as_deprecation_tracker/receiver.rb