zeitwerk 2.5.4 → 2.6.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +473 -50
- data/lib/zeitwerk/cref.rb +99 -0
- data/lib/zeitwerk/error.rb +9 -0
- data/lib/zeitwerk/explicit_namespace.rb +14 -10
- data/lib/zeitwerk/gem_inflector.rb +2 -2
- data/lib/zeitwerk/gem_loader.rb +68 -0
- data/lib/zeitwerk/internal.rb +12 -0
- data/lib/zeitwerk/kernel.rb +6 -7
- data/lib/zeitwerk/loader/callbacks.rb +34 -27
- data/lib/zeitwerk/loader/config.rb +95 -52
- data/lib/zeitwerk/loader/eager_load.rb +232 -0
- data/lib/zeitwerk/loader/helpers.rb +106 -55
- data/lib/zeitwerk/loader.rb +287 -197
- data/lib/zeitwerk/null_inflector.rb +5 -0
- data/lib/zeitwerk/registry.rb +14 -18
- data/lib/zeitwerk/version.rb +1 -1
- data/lib/zeitwerk.rb +4 -0
- metadata +8 -3
data/lib/zeitwerk/registry.rb
CHANGED
@@ -10,12 +10,11 @@ module Zeitwerk
|
|
10
10
|
# @sig Array[Zeitwerk::Loader]
|
11
11
|
attr_reader :loaders
|
12
12
|
|
13
|
-
# Registers loaders
|
14
|
-
# in case of reload.
|
13
|
+
# Registers gem loaders to let `for_gem` be idempotent in case of reload.
|
15
14
|
#
|
16
15
|
# @private
|
17
16
|
# @sig Hash[String, Zeitwerk::Loader]
|
18
|
-
attr_reader :
|
17
|
+
attr_reader :gem_loaders_by_root_file
|
19
18
|
|
20
19
|
# Maps absolute paths to the loaders responsible for them.
|
21
20
|
#
|
@@ -77,7 +76,7 @@ module Zeitwerk
|
|
77
76
|
# @sig (Zeitwerk::Loader) -> void
|
78
77
|
def unregister_loader(loader)
|
79
78
|
loaders.delete(loader)
|
80
|
-
|
79
|
+
gem_loaders_by_root_file.delete_if { |_, l| l == loader }
|
81
80
|
autoloads.delete_if { |_, l| l == loader }
|
82
81
|
inceptions.delete_if { |_, (_, l)| l == loader }
|
83
82
|
end
|
@@ -87,14 +86,8 @@ module Zeitwerk
|
|
87
86
|
#
|
88
87
|
# @private
|
89
88
|
# @sig (String) -> Zeitwerk::Loader
|
90
|
-
def loader_for_gem(root_file)
|
91
|
-
|
92
|
-
Loader.new.tap do |loader|
|
93
|
-
loader.tag = File.basename(root_file, ".rb")
|
94
|
-
loader.inflector = GemInflector.new(root_file)
|
95
|
-
loader.push_dir(File.dirname(root_file))
|
96
|
-
end
|
97
|
-
end
|
89
|
+
def loader_for_gem(root_file, namespace:, warn_on_extra_files:)
|
90
|
+
gem_loaders_by_root_file[root_file] ||= GemLoader.__new(root_file, namespace: namespace, warn_on_extra_files: warn_on_extra_files)
|
98
91
|
end
|
99
92
|
|
100
93
|
# @private
|
@@ -117,9 +110,12 @@ module Zeitwerk
|
|
117
110
|
|
118
111
|
# @private
|
119
112
|
# @sig (String) -> String?
|
120
|
-
def inception?(cpath)
|
113
|
+
def inception?(cpath, registered_by_loader=nil)
|
121
114
|
if pair = inceptions[cpath]
|
122
|
-
pair
|
115
|
+
abspath, loader = pair
|
116
|
+
if registered_by_loader.nil? || registered_by_loader.equal?(loader)
|
117
|
+
abspath
|
118
|
+
end
|
123
119
|
end
|
124
120
|
end
|
125
121
|
|
@@ -137,9 +133,9 @@ module Zeitwerk
|
|
137
133
|
end
|
138
134
|
end
|
139
135
|
|
140
|
-
@loaders
|
141
|
-
@
|
142
|
-
@autoloads
|
143
|
-
@inceptions
|
136
|
+
@loaders = []
|
137
|
+
@gem_loaders_by_root_file = {}
|
138
|
+
@autoloads = {}
|
139
|
+
@inceptions = {}
|
144
140
|
end
|
145
141
|
end
|
data/lib/zeitwerk/version.rb
CHANGED
data/lib/zeitwerk.rb
CHANGED
@@ -2,11 +2,15 @@
|
|
2
2
|
|
3
3
|
module Zeitwerk
|
4
4
|
require_relative "zeitwerk/real_mod_name"
|
5
|
+
require_relative "zeitwerk/internal"
|
6
|
+
require_relative "zeitwerk/cref"
|
5
7
|
require_relative "zeitwerk/loader"
|
8
|
+
require_relative "zeitwerk/gem_loader"
|
6
9
|
require_relative "zeitwerk/registry"
|
7
10
|
require_relative "zeitwerk/explicit_namespace"
|
8
11
|
require_relative "zeitwerk/inflector"
|
9
12
|
require_relative "zeitwerk/gem_inflector"
|
13
|
+
require_relative "zeitwerk/null_inflector"
|
10
14
|
require_relative "zeitwerk/kernel"
|
11
15
|
require_relative "zeitwerk/error"
|
12
16
|
require_relative "zeitwerk/version"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zeitwerk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Xavier Noria
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
Zeitwerk implements constant autoloading with Ruby semantics. Each gem
|
@@ -23,15 +23,20 @@ files:
|
|
23
23
|
- MIT-LICENSE
|
24
24
|
- README.md
|
25
25
|
- lib/zeitwerk.rb
|
26
|
+
- lib/zeitwerk/cref.rb
|
26
27
|
- lib/zeitwerk/error.rb
|
27
28
|
- lib/zeitwerk/explicit_namespace.rb
|
28
29
|
- lib/zeitwerk/gem_inflector.rb
|
30
|
+
- lib/zeitwerk/gem_loader.rb
|
29
31
|
- lib/zeitwerk/inflector.rb
|
32
|
+
- lib/zeitwerk/internal.rb
|
30
33
|
- lib/zeitwerk/kernel.rb
|
31
34
|
- lib/zeitwerk/loader.rb
|
32
35
|
- lib/zeitwerk/loader/callbacks.rb
|
33
36
|
- lib/zeitwerk/loader/config.rb
|
37
|
+
- lib/zeitwerk/loader/eager_load.rb
|
34
38
|
- lib/zeitwerk/loader/helpers.rb
|
39
|
+
- lib/zeitwerk/null_inflector.rb
|
35
40
|
- lib/zeitwerk/real_mod_name.rb
|
36
41
|
- lib/zeitwerk/registry.rb
|
37
42
|
- lib/zeitwerk/version.rb
|
@@ -58,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
58
63
|
- !ruby/object:Gem::Version
|
59
64
|
version: '0'
|
60
65
|
requirements: []
|
61
|
-
rubygems_version: 3.
|
66
|
+
rubygems_version: 3.5.11
|
62
67
|
signing_key:
|
63
68
|
specification_version: 4
|
64
69
|
summary: Efficient and thread-safe constant autoloader
|