Sha256: 3c5fd800a7cd7a63cffc88a27d972e509831ad4df9b72525e9c4be9ddd05030e

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

# This module is used to detect a Rails application and activate the corresponding plugins
# when Runger Config is loaded before Rails (e.g., in config/puma.rb).
module Runger::Rails
  class << self
    attr_reader :tracer, :name_method
    attr_accessor :disable_postponed_load_warning

    private

    def tracepoint_class_callback(event)
      # Ignore singletons
      return if event.self.singleton_class?

      # We wait till `rails/application/configuration.rb` has been loaded, since we rely on it
      # See https://github.com/palkan/runger_config/issues/134
      return unless name_method.bind_call(event.self) == 'Rails::Application::Configuration'

      tracer.disable

      unless disable_postponed_load_warning
        warn("Runger Config was loaded before Rails. Activating Runger Config Rails plugins now.\n" \
             'NOTE: Already loaded configs were provisioned without Rails-specific sources.')
      end

      require 'runger/rails'
    end
  end

  # TruffleRuby doesn't support TracePoint's end event
  unless defined?(::TruffleRuby)
    @tracer = TracePoint.new(:end, &method(:tracepoint_class_callback))
    @tracer.enable
    # Use `Module#name` instead of `self.name` to handle overwritten `name` method
    @name_method = Module.instance_method(:name)
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
runger_config-5.2.0 lib/runger/rails/autoload.rb
runger_config-5.1.0 lib/runger/rails/autoload.rb
runger_config-5.0.0 lib/runger/rails/autoload.rb