Skip to content

Commit 38354a7

Browse files
committed
Obey force_documentation when removing methods and attributes due to visibility
1 parent 6c6f0bf commit 38354a7

File tree

3 files changed

+124
-3
lines changed

3 files changed

+124
-3
lines changed

History.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
Higgins.
1717
* private_class_method and public_class_method are now parsed correctly for
1818
inherited methods. Issue #16 by gitsucks.
19+
* The doc directive now forces documentation even when the method is marked
20+
private or protected.
1921

2022
=== 3.5.3 / 2010-02-06
2123

lib/rdoc/context.rb

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,11 +1025,19 @@ def remove_invisible(min_visibility)
10251025
remove_invisible_in @attributes, min_visibility
10261026
end
10271027

1028+
##
1029+
# Only called when min_visibility == :public or :private
1030+
10281031
def remove_invisible_in(array, min_visibility) # :nodoc:
10291032
if min_visibility == :public
1030-
array.reject! { |e| e.visibility != :public }
1033+
array.reject! { |e|
1034+
e.visibility != :public and not e.force_documentation
1035+
}
10311036
else
1032-
array.reject! { |e| e.visibility == :private }
1037+
array.reject! { |e|
1038+
e.visibility == :private and
1039+
not e.force_documentation
1040+
}
10331041
end
10341042
end
10351043

@@ -1081,7 +1089,7 @@ def set_current_section(title, comment)
10811089

10821090
def set_visibility_for(methods, visibility, singleton = false)
10831091
methods_matching methods, singleton do |m|
1084-
m.visibility = visibility unless m.force_documentation
1092+
m.visibility = visibility
10851093
end
10861094
end
10871095

test/test_rdoc_context.rb

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,5 +478,116 @@ def test_methods_matching_inherit
478478
assert_equal [@parent_m], methods
479479
end
480480

481+
def test_remove_invisible_private
482+
util_visibilities
483+
484+
@vis.remove_invisible :private
485+
486+
assert_equal [@pub, @prot, @priv], @vis.method_list
487+
assert_equal [@apub, @aprot, @apriv], @vis.attributes
488+
end
489+
490+
def test_remove_invisible_protected
491+
util_visibilities
492+
493+
@vis.remove_invisible :protected
494+
495+
assert_equal [@pub, @prot], @vis.method_list
496+
assert_equal [@apub, @aprot], @vis.attributes
497+
end
498+
499+
def test_remove_invisible_public
500+
util_visibilities
501+
502+
@vis.remove_invisible :public
503+
504+
assert_equal [@pub], @vis.method_list
505+
assert_equal [@apub], @vis.attributes
506+
end
507+
508+
def test_remove_invisible_public_force
509+
util_visibilities
510+
511+
@priv.force_documentation = true
512+
@prot.force_documentation = true
513+
@apriv.force_documentation = true
514+
@aprot.force_documentation = true
515+
516+
@vis.remove_invisible :public
517+
518+
assert_equal [@pub, @prot, @priv], @vis.method_list
519+
assert_equal [@apub, @aprot, @apriv], @vis.attributes
520+
end
521+
522+
def test_remove_invisible_in_protected
523+
util_visibilities
524+
525+
methods = [@pub, @prot, @priv]
526+
527+
@c1.remove_invisible_in methods, :protected
528+
529+
assert_equal [@pub, @prot], methods
530+
end
531+
532+
def test_remove_invisible_in_protected_force
533+
util_visibilities
534+
535+
@priv.force_documentation = true
536+
537+
methods = [@pub, @prot, @priv]
538+
539+
@c1.remove_invisible_in methods, :protected
540+
541+
assert_equal [@pub, @prot, @priv], methods
542+
end
543+
544+
def test_remove_invisible_in_public
545+
util_visibilities
546+
547+
methods = [@pub, @prot, @priv]
548+
549+
@c1.remove_invisible_in methods, :public
550+
551+
assert_equal [@pub], methods
552+
end
553+
554+
def test_remove_invisible_in_public_force
555+
util_visibilities
556+
557+
@prot.force_documentation = true
558+
@priv.force_documentation = true
559+
560+
methods = [@pub, @prot, @priv]
561+
562+
@c1.remove_invisible_in methods, :public
563+
564+
assert_equal [@pub, @prot, @priv], methods
565+
end
566+
567+
def util_visibilities
568+
@pub = RDoc::AnyMethod.new nil, 'pub'
569+
@prot = RDoc::AnyMethod.new nil, 'prot'
570+
@priv = RDoc::AnyMethod.new nil, 'priv'
571+
572+
@apub = RDoc::Attr.new nil, 'pub', 'RW', nil
573+
@aprot = RDoc::Attr.new nil, 'prot', 'RW', nil
574+
@apriv = RDoc::Attr.new nil, 'priv', 'RW', nil
575+
576+
@vis = RDoc::NormalClass.new 'Vis'
577+
@vis.add_method @pub
578+
@vis.add_method @prot
579+
@vis.add_method @priv
580+
581+
@vis.add_attribute @apub
582+
@vis.add_attribute @aprot
583+
@vis.add_attribute @apriv
584+
585+
@prot.visibility = :protected
586+
@priv.visibility = :private
587+
588+
@aprot.visibility = :protected
589+
@apriv.visibility = :private
590+
end
591+
481592
end
482593

0 commit comments

Comments
 (0)