File tree Expand file tree Collapse file tree 2 files changed +28
-4
lines changed Expand file tree Collapse file tree 2 files changed +28
-4
lines changed Original file line number Diff line number Diff line change @@ -609,11 +609,11 @@ def ancestors_of klass
609
609
610
610
stores = classes [ current ]
611
611
612
- break unless stores and not stores . empty?
612
+ next unless stores and not stores . empty?
613
613
614
- klasses = stores . map do |store |
615
- store . ancestors [ current ]
616
- end . flatten . uniq
614
+ klasses = stores . flat_map do |store |
615
+ store . ancestors [ current ] || [ ]
616
+ end . uniq
617
617
618
618
klasses = klasses - seen
619
619
Original file line number Diff line number Diff line change @@ -421,6 +421,30 @@ def test_ancestors_of
421
421
assert_equal %w[ X Mixin Object Foo ] , @driver . ancestors_of ( 'Foo::Bar' )
422
422
end
423
423
424
+ def test_ancestors_of_chained_inclusion
425
+ # Store represents something like:
426
+ #
427
+ # module X
428
+ # end
429
+ #
430
+ # module Y
431
+ # include X
432
+ # end
433
+ #
434
+ # class Z
435
+ # include Y
436
+ # end
437
+ #
438
+ # Y is not chosen randomly, it has to be after Object in the alphabet
439
+ # to reproduce https://github.com/ruby/rdoc/issues/814.
440
+ store = RDoc ::RI ::Store . new @home_ri
441
+ store . cache [ :ancestors ] = { "Z" => [ "Object" , "Y" ] , "Y" => [ "X" ] }
442
+ store . cache [ :modules ] = %W[ X Y Z ]
443
+ @driver . stores = [ store ]
444
+
445
+ assert_equal %w[ X Y Object ] , @driver . ancestors_of ( 'Z' )
446
+ end
447
+
424
448
def test_classes
425
449
util_multi_store
426
450
You can’t perform that action at this time.
0 commit comments