class FastRI::NameDescriptor
Alternative NameDescriptor implementation which doesn't require class/module names to be properly capitalized.
Rules:
-
#foo
: instance methodfoo
-
.foo
: methodfoo
(either singleton or instance) -
::foo
: singleton methodfoo
-
foo::bar#bar<tt>: instance method bar under <tt>foo::bar
-
foo::bar.bar<tt>: either singleton or instance method bar under <tt>foo::bar
-
<tt>foo::bar::Baz<tt>: module/class foo:bar::Baz
-
foo::bar::baz
: singleton methodbaz
fromfoo::bar
-
other: raise RiError
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
# File lib/fastri/name_descriptor.rb, line 26 def initialize(arg) @class_names = [] @method_name = nil @is_class_method = nil case arg when /((?:[^:]*::)*[^:]*)(#|::|\.)(.*)$/ ns, sep, meth_or_class = $~.captures # optimization attempt: try to guess the real capitalization, # so we get a direct hit @class_names = ns.split(/::/).map{|x| x[0,1] = x[0,1].upcase; x } if %w[# .].include? sep @method_name = meth_or_class @is_class_method = case sep when "#"; false when "."; nil end else if ("A".."Z").include? meth_or_class[0,1] # 1.9 compatibility @class_names << meth_or_class else @method_name = meth_or_class @is_class_method = true end end when /^[^#:.]+/ if ("A".."Z").include? arg[0,1] @class_names = [arg] else @method_name = arg.dup @is_class_method = nil end else raise RiError, "Cannot create NameDescriptor from #{arg}" 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 lib/fastri/name_descriptor.rb, line 66 def full_class_name @class_names.join("::") end