From d145e4c0f2943adfc217dc7bb52d69486b6e76a1 Mon Sep 17 00:00:00 2001 From: Baron Bloomer Date: Tue, 4 Oct 2022 15:10:17 +0100 Subject: [PATCH] [ctran/annotate_models#969] Add support for Rails autoloader collapsed directories --- lib/annotate/annotate_models.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/annotate/annotate_models.rb b/lib/annotate/annotate_models.rb index fc503839..027c69a6 100644 --- a/lib/annotate/annotate_models.rb +++ b/lib/annotate/annotate_models.rb @@ -611,6 +611,15 @@ def get_loaded_model(model_path, file) $LOAD_PATH.map(&:to_s) .select { |path| absolute_file.include?(path) } .map { |path| absolute_file.sub(path, '').sub(/\.rb$/, '').sub(/^\//, '') } + + # Handle Rails apps with collapsed model paths + model_paths = model_paths + .select do |model_path| + defined?(Rails) && + Rails.autoloaders.main.collapse_dirs.any? && + Rails.autoloaders.main.collapse_dirs.select { |path| path.match(model_path) } + end.map { |model_path| model_path.sub(/\/models/, '') } + model_paths .map { |path| get_loaded_model_by_path(path) } .find { |loaded_model| !loaded_model.nil? }