Class: Zeitwerk::Cref

Inherits:
Object
  • Object
show all
Includes:
RealModName
Defined in:
lib/zeitwerk/cref.rb

Overview

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. Examples:

cref.path
cref.set(value)
cref.get

The constant may or may not exist in mod.

Defined Under Namespace

Classes: Map

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from RealModName

#real_mod_name

Constructor Details

#initialize(mod, cname) ⇒ Cref

The type of the first argument is Module because Class < Module, class objects are also valid.



28
29
30
31
32
# File 'lib/zeitwerk/cref.rb', line 28

def initialize(mod, cname)
  @mod   = mod
  @cname = cname
  @path  = nil
end

Instance Attribute Details

#cnameObject (readonly)

Returns the value of attribute cname.



22
23
24
# File 'lib/zeitwerk/cref.rb', line 22

def cname
  @cname
end

#modObject (readonly)

Returns the value of attribute mod.



19
20
21
# File 'lib/zeitwerk/cref.rb', line 19

def mod
  @mod
end

Instance Method Details

#autoload(abspath) ⇒ Object



46
47
48
# File 'lib/zeitwerk/cref.rb', line 46

def autoload(abspath)
  @mod.autoload(@cname, abspath)
end

#autoload?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/zeitwerk/cref.rb', line 41

def autoload?
  @mod.autoload?(@cname, false)
end

#defined?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/zeitwerk/cref.rb', line 51

def defined?
  @mod.const_defined?(@cname, false)
end

#getObject

Raises:



62
63
64
# File 'lib/zeitwerk/cref.rb', line 62

def get
  @mod.const_get(@cname, false)
end

#pathObject Also known as: to_s



35
36
37
# File 'lib/zeitwerk/cref.rb', line 35

def path
  @path ||= Object.equal?(@mod) ? @cname.name : "#{real_mod_name(@mod)}::#{@cname.name}".freeze
end

#removeObject

Raises:



68
69
70
# File 'lib/zeitwerk/cref.rb', line 68

def remove
  @mod.__send__(:remove_const, @cname)
end

#set(value) ⇒ Object



56
57
58
# File 'lib/zeitwerk/cref.rb', line 56

def set(value)
  @mod.const_set(@cname, value)
end