module ActiveRecordQueryTrace

Experimental RBS support (using type sampling data from the type_fusion project).

# sig/active_record_query_trace.rbs

module ActiveRecordQueryTrace
  def rails_root_regexp: () -> untyped
end

def backtrace_cleaner=(cleaner)

def backtrace_cleaner=(cleaner)
  @backtrace_cleaner =
    if cleaner.is_a?(Proc)
      cleaner
    else
      proc { |trace| cleaner.clean(trace) }
    end
end

def default_cleaner

def default_cleaner
  @default_cleaner ||= setup_backtrace_cleaner
end

def level=(level)

When changing the level we need to reset the backtrace cleaner used
def level=(level)
  @level = level
  @default_cleaner = nil
end

def rails_root_regexp

Experimental RBS support (using type sampling data from the type_fusion project).

def rails_root_regexp: () -> untyped

This signature was generated using 26 samples from 1 application.

this file is loaded.
This cannot be set in a constant as Rails.root is not yet available when
def rails_root_regexp
  @rails_root_regexp ||= %r{#{Regexp.escape(Rails.root.to_s)}(?!/vendor)}
end

def remove_filters_and_silencers(cleaner)

def remove_filters_and_silencers(cleaner)
  cleaner.remove_filters!
  cleaner.remove_silencers!
end

def setup_backtrace_cleaner

avoiding the dealing with Rails.backtrace_cleaner
The following code creates a brand new BacktraceCleaner just for the use of this Gem
def setup_backtrace_cleaner
  cleaner = Rails::BacktraceCleaner.new
  remove_filters_and_silencers cleaner
  cleaner.instance_variable_set :@root, Rails.root.to_s if cleaner.instance_variable_get(:@root) == '/'
  case ActiveRecordQueryTrace.level
  when :app
    cleaner.add_silencer { |line| line !~ rails_root_regexp }
  when :rails
    cleaner.add_silencer { |line| line =~ rails_root_regexp }
  end
  cleaner
end