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