mirror of
https://github.com/awesome-print/awesome_print
synced 2023-03-27 23:22:34 -04:00
Do not fail when some garbage gets appanded to methods array
This commit is contained in:
parent
2ad522d36e
commit
db70523e43
2 changed files with 15 additions and 7 deletions
|
@ -214,15 +214,17 @@ module AwesomePrint
|
||||||
def methods_array(a)
|
def methods_array(a)
|
||||||
object = a.instance_variable_get('@__awesome_methods__')
|
object = a.instance_variable_get('@__awesome_methods__')
|
||||||
tuples = a.map do |name|
|
tuples = a.map do |name|
|
||||||
tuple = if object.respond_to?(name, true) # Is this a regular method?
|
if name.is_a?(Symbol) || name.is_a?(String) # Ignore garbage, ex. 42.methods << [ :blah ]
|
||||||
the_method = object.method(name) rescue nil # Avoid potential ArgumentError if object#method is overridden.
|
tuple = if object.respond_to?(name, true) # Is this a regular method?
|
||||||
if the_method && the_method.respond_to?(:arity) # Is this original object#method?
|
the_method = object.method(name) rescue nil # Avoid potential ArgumentError if object#method is overridden.
|
||||||
method_tuple(the_method) # Yes, we are good.
|
if the_method && the_method.respond_to?(:arity) # Is this original object#method?
|
||||||
|
method_tuple(the_method) # Yes, we are good.
|
||||||
|
end
|
||||||
|
elsif object.respond_to?(:instance_method) # Is this an unbound method?
|
||||||
|
method_tuple(object.instance_method(name))
|
||||||
end
|
end
|
||||||
elsif object.respond_to?(:instance_method) # Is this an unbound method?
|
|
||||||
method_tuple(object.instance_method(name))
|
|
||||||
end
|
end
|
||||||
tuple || [ name.to_s, '(?)', '' ] # Return WTF default if all the above fails.
|
tuple || [ name.to_s, '(?)', '?' ] # Return WTF default if all the above fails.
|
||||||
end
|
end
|
||||||
|
|
||||||
width = (tuples.size - 1).to_s.size
|
width = (tuples.size - 1).to_s.size
|
||||||
|
|
|
@ -445,4 +445,10 @@ describe "Methods arrays" do
|
||||||
hello = Hello.new
|
hello = Hello.new
|
||||||
(hello.send(:his) - hello.send(:her)).sort_by { |x| x.to_s }.should == [ :him, :his ]
|
(hello.send(:his) - hello.send(:her)).sort_by { |x| x.to_s }.should == [ :him, :his ]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "appending garbage to methods array should not raise error" do
|
||||||
|
arr = 42.methods << [ :wtf ]
|
||||||
|
arr.ai(:plain => true).should_not raise_error(TypeError)
|
||||||
|
arr.ai(:plain => true).should =~ /\s+wtf\(\?\)\s+\?/
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue