Class: NameDescriptor
- Inherits:
-
Object
- Object
- NameDescriptor
- 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
-
#class_names ⇒ Object
readonly
Returns the value of attribute class_names.
-
#is_class_method ⇒ Object
readonly
true and false have the obvious meaning.
-
#method_name ⇒ Object
readonly
Returns the value of attribute method_name.
Instance Method Summary collapse
-
#full_class_name ⇒ Object
Return the full class name (with '::' between the components) or "" if there's no class name.
-
#initialize(arg) ⇒ NameDescriptor
constructor
arg may be 1.
Constructor Details
#initialize(arg) ⇒ NameDescriptor
arg may be
-
a class or module name (optionally qualified with other class or module names (Kernel, File::Stat etc)
-
a method name
-
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_names ⇒ Object (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_method ⇒ Object (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_name ⇒ Object (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_name ⇒ Object
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 |