Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • rdoc/method_attr.rb

Class/Module Index [+]



Abstract class representing either a method or an attribute.



Array of other names for this method/attribute


The #call_seq or the #param_seq with method name, if there is no call_seq.


Parameters yielded by the called block


Different ways to call this method


The method/attribute we’re aliasing


Name of this method/attribute.


Pretty parameter list for this method


Parameters for this method


Is this a singleton method/attribute?


Source file token stream


public, protected, private

Public Class Methods

new(text, name) click to toggle source

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

  @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

Public Instance Methods

<=>(other) click to toggle source

Order by singleton then name

               # File rdoc/method_attr.rb, line 102
def <=>(other)
  [@singleton ? 0 : 1, name] <=> [other.singleton ? 0 : 1, other.name]
add_alias(an_alias, context) click to toggle source

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
aref() click to toggle source

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() click to toggle source

Prefix for aref, defined by subclasses.

               # File rdoc/method_attr.rb, line 197
def aref_prefix
  raise NotImplementedError
block_params=(value) click to toggle source

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

  # class prefixes
  value.gsub!(/[A-Za-z0-9_:]+::/, '')

  # simple expressions
  value = $1 if value =~ /^([a-z0-9_]+)\s*[-*+\/]/

  @block_params = value.strip
documented?() click to toggle source

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?)
full_name() click to toggle source

Full method/attribute name including namespace

               # File rdoc/method_attr.rb, line 270
def full_name
  @full_name || "#{parent_name}#{pretty_name}"
html_name() click to toggle source

HTML id-friendly method/attribute name

               # File rdoc/method_attr.rb, line 263
def html_name
  CGI.escape(@name.gsub('-', '-2D')).gsub('%','-').sub(/^-/, '')
name_prefix() click to toggle source

‘::’ for a class method/attribute, ‘#’ for an instance method.

               # File rdoc/method_attr.rb, line 277
def name_prefix
  singleton ? '::' : '#'
parent_name() click to toggle source

Name of our parent with special handling for un-marshaled methods

               # File rdoc/method_attr.rb, line 305
def parent_name
  @parent_name || super
path() click to toggle source

Path to this method

               # File rdoc/method_attr.rb, line 298
def path
pretty_name() click to toggle source

Method/attribute name with class/instance indicator

               # File rdoc/method_attr.rb, line 284
def pretty_name
see() click to toggle source

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
type() click to toggle source

Type of method/attribute (class or instance)

               # File rdoc/method_attr.rb, line 291
def type
  singleton ? 'class' : 'instance'

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus