In Files

  • rdoc/ri/ri_util.rb

Parent

Files

Class/Module Index [+]

Quicksearch

NameDescriptor

Break argument into its constituent class or module names, an optional method type, and a method name

Attributes

class_names[R]
is_class_method[R]

true and false have the obvious meaning. nil means we don’t care

method_name[R]

Public Class Methods

new(arg) click to toggle source

arg may be

  1. a class or module name (optionally qualified with other class or module names (Kernel, File::Stat etc)

  2. a method name

  3. a method name qualified by a optionally fully qualified class or module name

We’re fairly casual about delimiters: folks can say Kernel::puts, Kernel.puts, or Kernel#puts for example. There’s one exception: if you say IO::read, we look for a class method, but if you say IO.read, we look for an instance method

 
               # File rdoc/ri/ri_util.rb, line 28
def initialize(arg)
  @class_names = []
  separator = nil

  tokens = arg.split(/(\.|::|#)/)

  # Skip leading '::', '#' or '.', but remember it might
  # be a method name qualifier
  separator = tokens.shift if tokens[0] =~ /^(\.|::|#)/

  # Skip leading '::', but remember we potentially have an inst

  # leading stuff must be class names
  
  while tokens[0] =~ /^[A-Z]/
    @class_names << tokens.shift
    unless tokens.empty?
      separator = tokens.shift
      break unless separator == "::"
    end
  end
  
  # Now must have a single token, the method name, or an empty
  # array
  unless tokens.empty?
    @method_name = tokens.shift
    # We may now have a trailing !, ?, or = to roll into
    # the method name
    if !tokens.empty? && tokens[0] =~ /^[!?=]$/
      @method_name << tokens.shift
    end

    if @method_name =~ /::|\.|#/ or !tokens.empty?
      raise RiError.new("Bad argument: #{arg}") 
    end
    if separator && separator != '.'
      @is_class_method = separator == "::"
    end
  end
end
            

Public Instance Methods

full_class_name() click to toggle source

Return the full class name (with ‘::’ between the components) or “” if there’s no class name

 
               # File rdoc/ri/ri_util.rb, line 72
def full_class_name
  @class_names.join("::")
end