Skip to content

Commit 67cc110

Browse files
committed
Add spec
Signed-off-by: Baron Bloomer <[email protected]>
1 parent 4baa4e9 commit 67cc110

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

lib/annotate/annotate_models.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -614,11 +614,11 @@ def get_loaded_model(model_path, file)
614614

615615
# Handle Rails apps with collapsed model paths
616616
model_paths = model_paths
617-
.select do |model_path|
618-
defined?(Rails) &&
619-
Rails.autoloaders.main.collapse_dirs.any? &&
620-
Rails.autoloaders.main.collapse_dirs.select { |path| path.match(model_path) }
621-
end.map { |model_path| model_path.sub(/\/models/, '') }
617+
.select do |mpath|
618+
defined?(Rails) &&
619+
Rails.autoloaders.main.collapse_dirs.any? &&
620+
Rails.autoloaders.main.collapse_dirs.select { |path| path.match(mpath) }
621+
end.map { |mpath| mpath.sub(/\/models/, '') }
622622

623623
model_paths
624624
.map { |path| get_loaded_model_by_path(path) }

spec/lib/annotate/annotate_models_spec.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1892,6 +1892,37 @@ class FooInsideBar < ActiveRecord::Base
18921892
expect(klass.name).to eq('Bar::FooInsideBar')
18931893
end
18941894
end
1895+
1896+
context 'when class Bar::Foo is defined in Rails collapsed directory' do
1897+
before do
1898+
Rails = double('Rails')
1899+
# rubocop:disable RSpec/MessageChain
1900+
allow(Rails).to receive_message_chain(:autoloaders, :main, :collapse_dirs) { Set.new(["bar/models"]) }
1901+
# rubocop:enable RSpec/MessageChain
1902+
$LOAD_PATH.unshift(dir)
1903+
end
1904+
1905+
let :dir do
1906+
AnnotateModels.model_dir[0]
1907+
end
1908+
1909+
let :filename do
1910+
'bar/models/foo.rb'
1911+
end
1912+
1913+
let :file_content do
1914+
<<~EOS
1915+
module Bar
1916+
class Foo < ActiveRecord::Base
1917+
end
1918+
end
1919+
EOS
1920+
end
1921+
1922+
it 'works' do
1923+
expect(klass.name).to eql('Bar::Foo')
1924+
end
1925+
end
18951926
end
18961927

18971928
context 'when class is defined inside module and class name is not capitalized normally' do

0 commit comments

Comments
 (0)