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 that encapsulates the constants API. Examples:

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

The constant may or may not exist in mod.

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.



23
24
25
26
27
# File 'lib/zeitwerk/cref.rb', line 23

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

Instance Attribute Details

#cnameObject (readonly)

Returns the value of attribute cname.



17
18
19
# File 'lib/zeitwerk/cref.rb', line 17

def cname
  @cname
end

Instance Method Details

#autoload(abspath) ⇒ Object



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

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

#autoload?Boolean

Returns:

  • (Boolean)


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

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

#defined?Boolean

Returns:

  • (Boolean)


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

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

#getObject

Raises:



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

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

#pathObject



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

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

#removeObject

Raises:



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

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

#set(value) ⇒ Object



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

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