Class: NameDescriptor

Inherits:
Object
  • Object
show all
Defined in:
lib/rdoc/ri/ri_util.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(arg) ⇒ NameDescriptor

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



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/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

Instance Attribute Details

#class_namesObject (readonly)

Returns the value of attribute class_names



10
11
12
# File 'lib/rdoc/ri/ri_util.rb', line 10

def class_names
  @class_names
end

#is_class_methodObject (readonly)

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



14
15
16
# File 'lib/rdoc/ri/ri_util.rb', line 14

def is_class_method
  @is_class_method
end

#method_nameObject (readonly)

Returns the value of attribute method_name



11
12
13
# File 'lib/rdoc/ri/ri_util.rb', line 11

def method_name
  @method_name
end

Instance Method Details

#full_class_nameObject

Return the full class name (with '::' between the components) or "" if there's no class name



72
73
74
# File 'lib/rdoc/ri/ri_util.rb', line 72

def full_class_name
  @class_names.join("::")
end