zeitwerk 2.5.0 → 2.6.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,12 +10,11 @@ module Zeitwerk
10
10
  # @sig Array[Zeitwerk::Loader]
11
11
  attr_reader :loaders
12
12
 
13
- # Registers loaders created with `for_gem` to make the method idempotent
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 :loaders_managing_gems
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
- loaders_managing_gems.delete_if { |_, l| l == loader }
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
- loaders_managing_gems[root_file] ||= begin
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
@@ -137,9 +130,9 @@ module Zeitwerk
137
130
  end
138
131
  end
139
132
 
140
- @loaders = []
141
- @loaders_managing_gems = {}
142
- @autoloads = {}
143
- @inceptions = {}
133
+ @loaders = []
134
+ @gem_loaders_by_root_file = {}
135
+ @autoloads = {}
136
+ @inceptions = {}
144
137
  end
145
138
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zeitwerk
4
- VERSION = "2.5.0"
4
+ VERSION = "2.6.12"
5
5
  end
data/lib/zeitwerk.rb CHANGED
@@ -2,8 +2,9 @@
2
2
 
3
3
  module Zeitwerk
4
4
  require_relative "zeitwerk/real_mod_name"
5
+ require_relative "zeitwerk/internal"
5
6
  require_relative "zeitwerk/loader"
6
- require_relative "zeitwerk/autoloads"
7
+ require_relative "zeitwerk/gem_loader"
7
8
  require_relative "zeitwerk/registry"
8
9
  require_relative "zeitwerk/explicit_namespace"
9
10
  require_relative "zeitwerk/inflector"
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.5.0
4
+ version: 2.6.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xavier Noria
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-20 00:00:00.000000000 Z
11
+ date: 2023-09-25 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,17 @@ files:
23
23
  - MIT-LICENSE
24
24
  - README.md
25
25
  - lib/zeitwerk.rb
26
- - lib/zeitwerk/autoloads.rb
27
26
  - lib/zeitwerk/error.rb
28
27
  - lib/zeitwerk/explicit_namespace.rb
29
28
  - lib/zeitwerk/gem_inflector.rb
29
+ - lib/zeitwerk/gem_loader.rb
30
30
  - lib/zeitwerk/inflector.rb
31
+ - lib/zeitwerk/internal.rb
31
32
  - lib/zeitwerk/kernel.rb
32
33
  - lib/zeitwerk/loader.rb
33
34
  - lib/zeitwerk/loader/callbacks.rb
34
35
  - lib/zeitwerk/loader/config.rb
36
+ - lib/zeitwerk/loader/eager_load.rb
35
37
  - lib/zeitwerk/loader/helpers.rb
36
38
  - lib/zeitwerk/real_mod_name.rb
37
39
  - lib/zeitwerk/registry.rb
@@ -59,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
61
  - !ruby/object:Gem::Version
60
62
  version: '0'
61
63
  requirements: []
62
- rubygems_version: 3.2.22
64
+ rubygems_version: 3.4.16
63
65
  signing_key:
64
66
  specification_version: 4
65
67
  summary: Efficient and thread-safe constant autoloader
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Zeitwerk
4
- # @private
5
- class Autoloads
6
- # Maps crefs for which an autoload has been defined to the corresponding
7
- # absolute path.
8
- #
9
- # [Object, :User] => "/Users/fxn/blog/app/models/user.rb"
10
- # [Object, :Hotel] => "/Users/fxn/blog/app/models/hotel"
11
- # ...
12
- #
13
- # This colection is transient, callbacks delete its entries as autoloads get
14
- # executed.
15
- #
16
- # @sig Hash[[Module, Symbol], String]
17
- attr_reader :c2a
18
-
19
- # This is the inverse of c2a, for inverse lookups.
20
- #
21
- # @sig Hash[String, [Module, Symbol]]
22
- attr_reader :a2c
23
-
24
- # @sig () -> void
25
- def initialize
26
- @c2a = {}
27
- @a2c = {}
28
- end
29
-
30
- # @sig (Module, Symbol, String) -> void
31
- def define(parent, cname, abspath)
32
- parent.autoload(cname, abspath)
33
- cref = [parent, cname]
34
- c2a[cref] = abspath
35
- a2c[abspath] = cref
36
- end
37
-
38
- # @sig () { () -> [[Module, Symbol], String] } -> void
39
- def each(&block)
40
- c2a.each(&block)
41
- end
42
-
43
- # @sig (Module, Symbol) -> String?
44
- def abspath_for(parent, cname)
45
- c2a[[parent, cname]]
46
- end
47
-
48
- # @sig (String) -> [Module, Symbol]?
49
- def cref_for(abspath)
50
- a2c[abspath]
51
- end
52
-
53
- # @sig (String) -> [Module, Symbol]?
54
- def delete(abspath)
55
- cref = a2c.delete(abspath)
56
- c2a.delete(cref)
57
- cref
58
- end
59
-
60
- # @sig () -> void
61
- def clear
62
- c2a.clear
63
- a2c.clear
64
- end
65
-
66
- # @sig () -> bool
67
- def empty?
68
- c2a.empty? && a2c.empty?
69
- end
70
- end
71
- end