module FactoryBotInstruments::TracingHelpers

Public Class Methods

sql_tracer(active) { || ... } click to toggle source
# File lib/factory_bot_instruments/tracing.rb, line 39
def self.sql_tracer(active)
  return yield unless active

  begin
    stdout_log = Logger.new($stdout)

    stdout_log.formatter = proc do |severity, datetime, progname, msg|
      depth = "|  " * ($FACTORY_BOT_INSTRUMENTS_TRACING_DEPTH - 1)

      msg = FactoryBotInstruments::TracingHelpers.uncolorize(msg)
      msg = msg.strip
      msg = msg.gsub(/^SQL /, "") # remove SQL prefix

      "#{depth}|  \e[36m#{msg}\e[0m\n"
    end

    standard_logger = ActiveRecord::Base.logger
    ActiveRecord::Base.logger = stdout_log

    yield
  ensure
    ActiveRecord::Base.logger = standard_logger
  end
end
uncolorize(string) click to toggle source
# File lib/factory_bot_instruments/tracing.rb, line 35
def self.uncolorize(string)
  string.gsub(/\033\[\d+m/, "")
end