Sha256: 94fe80d230f4dc8091cd587a49d941eb024329132877b4d52acf1690fe7028ac

Contents?: true

Size: 1.38 KB

Versions: 13

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

# This module is used to detect a Rails application and activate the corresponding plugins
# when Anyway Config is loaded before Rails (e.g., in config/puma.rb).
module Anyway
  module Rails
    using RubyNext

    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/anyway_config/issues/134
        return unless name_method.bind_call(event.self) == "Rails::Application::Configuration"

        tracer.disable

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

        require "anyway/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
end

Version data entries

13 entries across 13 versions & 2 rubygems

Version Path
anyway_config-2.7.1 lib/anyway/rails/autoload.rb
anyway_config-2.7.0 lib/anyway/rails/autoload.rb
anyway_config-2.6.4 lib/anyway/rails/autoload.rb
anyway_config-2.6.3 lib/anyway/rails/autoload.rb
anyway_config-2.6.2 lib/anyway/rails/autoload.rb
anyway_config-2.6.1 lib/anyway/rails/autoload.rb
anyway_config-2.6.0 lib/anyway/rails/autoload.rb
runger_config-2.7.0 lib/anyway/rails/autoload.rb
runger_config-2.6.1 lib/anyway/rails/autoload.rb
runger_config-2.6.0 lib/anyway/rails/autoload.rb
anyway_config-2.5.4 lib/anyway/rails/autoload.rb
anyway_config-2.5.3 lib/anyway/rails/autoload.rb
anyway_config-2.5.2 lib/anyway/rails/autoload.rb