Skip to content

Commit

Permalink
Obey force_documentation when removing methods and attributes due to …
Browse files Browse the repository at this point in the history
…visibility
  • Loading branch information
drbrain committed May 13, 2011
1 parent 6c6f0bf commit 38354a7
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 3 deletions.
2 changes: 2 additions & 0 deletions History.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
Higgins.
* private_class_method and public_class_method are now parsed correctly for
inherited methods. Issue #16 by gitsucks.
* The doc directive now forces documentation even when the method is marked
private or protected.

=== 3.5.3 / 2010-02-06

Expand Down
14 changes: 11 additions & 3 deletions lib/rdoc/context.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1025,11 +1025,19 @@ def remove_invisible(min_visibility)
remove_invisible_in @attributes, min_visibility
end

##
# Only called when min_visibility == :public or :private

def remove_invisible_in(array, min_visibility) # :nodoc:
if min_visibility == :public
array.reject! { |e| e.visibility != :public }
array.reject! { |e|
e.visibility != :public and not e.force_documentation
}
else
array.reject! { |e| e.visibility == :private }
array.reject! { |e|
e.visibility == :private and
not e.force_documentation
}
end
end

Expand Down Expand Up @@ -1081,7 +1089,7 @@ def set_current_section(title, comment)

def set_visibility_for(methods, visibility, singleton = false)
methods_matching methods, singleton do |m|
m.visibility = visibility unless m.force_documentation
m.visibility = visibility
end
end

Expand Down
111 changes: 111 additions & 0 deletions test/test_rdoc_context.rb
Original file line number Diff line number Diff line change
Expand Up @@ -478,5 +478,116 @@ def test_methods_matching_inherit
assert_equal [@parent_m], methods
end

def test_remove_invisible_private
util_visibilities

@vis.remove_invisible :private

assert_equal [@pub, @prot, @priv], @vis.method_list
assert_equal [@apub, @aprot, @apriv], @vis.attributes
end

def test_remove_invisible_protected
util_visibilities

@vis.remove_invisible :protected

assert_equal [@pub, @prot], @vis.method_list
assert_equal [@apub, @aprot], @vis.attributes
end

def test_remove_invisible_public
util_visibilities

@vis.remove_invisible :public

assert_equal [@pub], @vis.method_list
assert_equal [@apub], @vis.attributes
end

def test_remove_invisible_public_force
util_visibilities

@priv.force_documentation = true
@prot.force_documentation = true
@apriv.force_documentation = true
@aprot.force_documentation = true

@vis.remove_invisible :public

assert_equal [@pub, @prot, @priv], @vis.method_list
assert_equal [@apub, @aprot, @apriv], @vis.attributes
end

def test_remove_invisible_in_protected
util_visibilities

methods = [@pub, @prot, @priv]

@c1.remove_invisible_in methods, :protected

assert_equal [@pub, @prot], methods
end

def test_remove_invisible_in_protected_force
util_visibilities

@priv.force_documentation = true

methods = [@pub, @prot, @priv]

@c1.remove_invisible_in methods, :protected

assert_equal [@pub, @prot, @priv], methods
end

def test_remove_invisible_in_public
util_visibilities

methods = [@pub, @prot, @priv]

@c1.remove_invisible_in methods, :public

assert_equal [@pub], methods
end

def test_remove_invisible_in_public_force
util_visibilities

@prot.force_documentation = true
@priv.force_documentation = true

methods = [@pub, @prot, @priv]

@c1.remove_invisible_in methods, :public

assert_equal [@pub, @prot, @priv], methods
end

def util_visibilities
@pub = RDoc::AnyMethod.new nil, 'pub'
@prot = RDoc::AnyMethod.new nil, 'prot'
@priv = RDoc::AnyMethod.new nil, 'priv'

@apub = RDoc::Attr.new nil, 'pub', 'RW', nil
@aprot = RDoc::Attr.new nil, 'prot', 'RW', nil
@apriv = RDoc::Attr.new nil, 'priv', 'RW', nil

@vis = RDoc::NormalClass.new 'Vis'
@vis.add_method @pub
@vis.add_method @prot
@vis.add_method @priv

@vis.add_attribute @apub
@vis.add_attribute @aprot
@vis.add_attribute @apriv

@prot.visibility = :protected
@priv.visibility = :private

@aprot.visibility = :protected
@apriv.visibility = :private
end

end

0 comments on commit 38354a7

Please sign in to comment.