class Zeitwerk::Cref
This private class encapsulates pairs (mod, cname).
Objects represent the constant cname in the class or module object mod, and have API to manage them that encapsulates the constants API. Examples:
cref.path cref.set(value) cref.get
The constant may or may not exist in mod.
Attributes
cname[R]
@sig Symbol
Public Class Methods
new(mod, cname)
click to toggle source
The type of the first argument is Module because Class < Module, class objects are also valid.
@sig (Module, Symbol) -> void
# File lib/zeitwerk/cref.rb, line 23 def initialize(mod, cname) @mod = mod @cname = cname @path = nil end
Public Instance Methods
autoload(abspath)
click to toggle source
@sig (String) -> bool
# File lib/zeitwerk/cref.rb, line 74 def autoload(abspath) @mod.autoload(@cname, abspath) end
autoload?()
click to toggle source
@sig () -> String?
# File lib/zeitwerk/cref.rb, line 63 def autoload? @mod.autoload?(@cname) if self.defined? end
defined?()
click to toggle source
@sig () -> bool
# File lib/zeitwerk/cref.rb, line 79 def defined? @mod.const_defined?(@cname, false) end
get()
click to toggle source
@raise [NameError] @sig () -> Object
# File lib/zeitwerk/cref.rb, line 90 def get @mod.const_get(@cname, false) end
path()
click to toggle source
Symbol#name was introduced in Ruby 3.0. It returns always the same frozen object, so we may save a few string allocations.
@sig () -> String
# File lib/zeitwerk/cref.rb, line 34 def path @path ||= Object.equal?(@mod) ? @cname.name : "#{real_mod_name(@mod)}::#{@cname.name}" end
remove()
click to toggle source
@raise [NameError] @sig () -> void
# File lib/zeitwerk/cref.rb, line 96 def remove @mod.__send__(:remove_const, @cname) end
set(value)
click to toggle source
@sig (Object) -> Object
# File lib/zeitwerk/cref.rb, line 84 def set(value) @mod.const_set(@cname, value) end