Class: Zeitwerk::Cref
- Inherits:
-
Object
- Object
- Zeitwerk::Cref
- 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
-
#cname ⇒ Object
readonly
Returns the value of attribute cname.
Instance Method Summary collapse
- #autoload(abspath) ⇒ Object
- #autoload? ⇒ Boolean
- #defined? ⇒ Boolean
- #get ⇒ Object
-
#initialize(mod, cname) ⇒ Cref
constructor
The type of the first argument is Module because Class < Module, class objects are also valid.
- #path ⇒ Object
- #remove ⇒ Object
- #set(value) ⇒ Object
Methods included from RealModName
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
#cname ⇒ Object (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
35 36 37 |
# File 'lib/zeitwerk/cref.rb', line 35 def autoload? @mod.autoload?(@cname, false) end |
#defined? ⇒ Boolean
45 46 47 |
# File 'lib/zeitwerk/cref.rb', line 45 def defined? @mod.const_defined?(@cname, false) end |
#get ⇒ Object
56 57 58 |
# File 'lib/zeitwerk/cref.rb', line 56 def get @mod.const_get(@cname, false) end |
#path ⇒ Object
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 |
#remove ⇒ Object
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 |