Для приложения Rails я бы хотел перегрузить или изменить Kernel :: load так, чтобы он выводил полный путь, например puts "-> #{File.expand_path(File.dirname(__FILE__))}/#{File.basename(__FILE__)}"
, для каждого загружаемого файла приложения Rails.
Как бы ясделай это?Я хотел бы дополнительно иметь возможность фильтровать, так что я предполагаю, что я бы добавил туда регулярное выражение, чтобы иметь возможность показывать только вывод (когда я не хочу, чтобы он был слишком многословным), который указывает на доступ к файлам внутритекущий каталог приложения rails.
В любом случае, я был бы признателен за пример перегрузки этого метода и того, где подходящее место для этого было бы активным в приложении Rails при запуске сервера.
Разрешение:
Что ж, хорошо, после того, как я немного разбил все вокруг и обнаружил set_trace_func
Я придумал следующее:
Я интегрировал set_trace_fun
в заголовокdevelopment.rb
в соответствии с тем, что было реализовано в геме mtrace
.У меня было много настроек, чтобы отфильтровать все, кроме моего каталога приложений, а также ряд других болтливых методов, но пока это работает.Источник mtrace, эффективно интегрированный с модификацией, выглядит следующим образом:
mtrace_indent = 0
set_trace_func lambda {|event, file, line, id, binding, klass|
case event
when 'call'
puts "\e[90m| " * mtrace_indent +
"\e[35m#{klass}\e[90m#\e[36m#{id} \e[90m#{file}:#{line}\e[0m" +
"#{' ' * ([10 - mtrace_indent, 1].max)}\e[90mtxmt://open/?url=file://#{ File.expand_path(file) }&line=#{ line }\e[0m"
mtrace_indent += 1
when 'return'
mtrace_indent -= 1
end
mtrace_indent = 0 if mtrace_indent < 0
}
Конечно, части URL txmt можно удалить, если вы не на Mac, но это действительно очень полезно.