Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
Abstract class representing either a method or an attribute.
Creates a new MethodAttr from token stream
text and method or attribute name name.
Usually this is called by super from a subclass.
# File rdoc/method_attr.rb, line 79
def initialize text, name
super()
@text = text
@name = name
@aliases = []
@is_alias_for = nil
@parent_name = nil
@singleton = nil
@visibility = :public
@see = false
@arglists = nil
@block_params = nil
@call_seq = nil
@param_seq = nil
@params = nil
end
Abstract method. Contexts in their building phase call this to register a new alias for this known method/attribute.
creates a new AnyMethod/Attribute newa named
an_alias.new_name;
adds self as newa.is_alias_for;
adds newa to aliases
adds newa to the methods/attributes of context.
# File rdoc/method_attr.rb, line 181
def add_alias(an_alias, context)
raise NotImplementedError
end
HTML fragment reference for this method
# File rdoc/method_attr.rb, line 188
def aref
type = singleton ? 'c' : 'i'
# % characters are not allowed in html names => dash instead
"#{aref_prefix}-#{type}-#{html_name}"
end
Prefix for aref, defined by subclasses.
# File rdoc/method_attr.rb, line 197
def aref_prefix
raise NotImplementedError
end
Attempts to sanitize the content passed by the ruby parser: remove outer parentheses, etc.
# File rdoc/method_attr.rb, line 205
def block_params=(value)
# 'yield.to_s' or 'assert yield, msg'
return @block_params = '' if value =~ /^[\.,]/
# remove trailing 'if/unless ...'
return @block_params = '' if value =~ /^(if|unless)\s/
value = $1.strip if value =~ /^(.+)\s(if|unless)\s/
# outer parentheses
value = $1 if value =~ /^\s*\((.*)\)\s*$/
value = value.strip
# proc/lambda
return @block_params = $1 if value =~ /^(proc|lambda)(\s*\{|\sdo)/
# surrounding +...+ or [...]
value = $1.strip if value =~ /^\+(.*)\+$/
value = $1.strip if value =~ /^\[(.*)\]$/
return @block_params = '' if value.empty?
# global variable
return @block_params = 'str' if value =~ /^\$[&0-9]$/
# wipe out array/hash indices
value.gsub!(/(\w)\[[^\[]+\]/, '\1')
# remove @ from class/instance variables
value.gsub!(/@@?([a-z0-9_]+)/, '\1')
# method calls => method name
value.gsub!(/([A-Z:a-z0-9_]+)\.([a-z0-9_]+)(\s*\(\s*[a-z0-9_.,\s]*\s*\)\s*)?/) do
case $2
when 'to_s' then $1
when 'const_get' then 'const'
when 'new' then
$1.split('::').last. # ClassName => class_name
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
gsub(/([a-z\d])([A-Z])/,'\1_\2').
downcase
else
$2
end
end
# class prefixes
value.gsub!(/[A-Za-z0-9_:]+::/, '')
# simple expressions
value = $1 if value =~ /^([a-z0-9_]+)\s*[-*+\/]/
@block_params = value.strip
end
A method/attribute is documented if any of the following is true:
it was marked with :nodoc:;
it has a comment;
it is an alias for a documented method;
it has a #see method that is documented.
# File rdoc/method_attr.rb, line 113
def documented?
super or
(is_alias_for and is_alias_for.documented?) or
(see and see.documented?)
end
Full method/attribute name including namespace
# File rdoc/method_attr.rb, line 270
def full_name
@full_name || "#{parent_name}#{pretty_name}"
end
HTML id-friendly method/attribute name
# File rdoc/method_attr.rb, line 263
def html_name
CGI.escape(@name.gsub('-', '-2D')).gsub('%','-').sub(/^-/, '')
end
'::' for a class method/attribute, '#' for an instance method.
# File rdoc/method_attr.rb, line 277
def name_prefix
singleton ? '::' : '#'
end
Name of our parent with special handling for un-marshaled methods
# File rdoc/method_attr.rb, line 305
def parent_name
@parent_name || super
end
Path to this method
# File rdoc/method_attr.rb, line 298
def path
"#{@parent.path}##{aref}"
end
Method/attribute name with class/instance indicator
# File rdoc/method_attr.rb, line 284
def pretty_name
"#{name_prefix}#{@name}"
end
A method/attribute to look at, in particular if this method/attribute has no documentation.
It can be a method/attribute of the superclass or of an included module, including the Kernel module, which is always appended to the included modules.
Returns nil if there is no such method/attribute. The
#is_alias_for method/attribute, if any, is not included.
Templates may generate a “see also …” if this method/attribute has documentation, and “see …” if it does not.
# File rdoc/method_attr.rb, line 133
def see
@see = find_see if @see == false
@see
end