zeitwerk 2.4.0 → 2.5.0.beta2

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.
@@ -7,8 +7,7 @@ module Zeitwerk::RealModName
7
7
  #
8
8
  # The name method can be overridden, hence the indirection in this method.
9
9
  #
10
- # @param mod [Class, Module]
11
- # @return [String, nil]
10
+ # @sig (Module) -> String?
12
11
  if UnboundMethod.method_defined?(:bind_call)
13
12
  def real_mod_name(mod)
14
13
  UNBOUND_METHOD_MODULE_NAME.bind_call(mod)
@@ -7,23 +7,23 @@ module Zeitwerk
7
7
  # them from being garbage collected.
8
8
  #
9
9
  # @private
10
- # @return [<Zeitwerk::Loader>]
10
+ # @sig Array[Zeitwerk::Loader]
11
11
  attr_reader :loaders
12
12
 
13
13
  # Registers loaders created with `for_gem` to make the method idempotent
14
14
  # in case of reload.
15
15
  #
16
16
  # @private
17
- # @return [{String => Zeitwerk::Loader}]
17
+ # @sig Hash[String, Zeitwerk::Loader]
18
18
  attr_reader :loaders_managing_gems
19
19
 
20
- # Maps real paths to the loaders responsible for them.
20
+ # Maps absolute paths to the loaders responsible for them.
21
21
  #
22
22
  # This information is used by our decorated `Kernel#require` to be able to
23
23
  # invoke callbacks and autovivify modules.
24
24
  #
25
25
  # @private
26
- # @return [{String => Zeitwerk::Loader}]
26
+ # @sig Hash[String, Zeitwerk::Loader]
27
27
  attr_reader :autoloads
28
28
 
29
29
  # This hash table addresses an edge case in which an autoload is ignored.
@@ -62,24 +62,31 @@ module Zeitwerk
62
62
  # end
63
63
  #
64
64
  # @private
65
- # @return [{String => (String, Zeitwerk::Loader)}]
65
+ # @sig Hash[String, [String, Zeitwerk::Loader]]
66
66
  attr_reader :inceptions
67
67
 
68
68
  # Registers a loader.
69
69
  #
70
70
  # @private
71
- # @param loader [Zeitwerk::Loader]
72
- # @return [void]
71
+ # @sig (Zeitwerk::Loader) -> void
73
72
  def register_loader(loader)
74
73
  loaders << loader
75
74
  end
76
75
 
76
+ # @private
77
+ # @sig (Zeitwerk::Loader) -> void
78
+ def unregister_loader(loader)
79
+ loaders.delete(loader)
80
+ loaders_managing_gems.delete_if { |_, l| l == loader }
81
+ autoloads.delete_if { |_, l| l == loader }
82
+ inceptions.delete_if { |_, (_, l)| l == loader }
83
+ end
84
+
77
85
  # This method returns always a loader, the same instance for the same root
78
86
  # file. That is how Zeitwerk::Loader.for_gem is idempotent.
79
87
  #
80
88
  # @private
81
- # @param root_file [String]
82
- # @return [Zeitwerk::Loader]
89
+ # @sig (String) -> Zeitwerk::Loader
83
90
  def loader_for_gem(root_file)
84
91
  loaders_managing_gems[root_file] ||= begin
85
92
  Loader.new.tap do |loader|
@@ -91,32 +98,25 @@ module Zeitwerk
91
98
  end
92
99
 
93
100
  # @private
94
- # @param loader [Zeitwerk::Loader]
95
- # @param realpath [String]
96
- # @return [void]
97
- def register_autoload(loader, realpath)
98
- autoloads[realpath] = loader
101
+ # @sig (Zeitwerk::Loader, String) -> String
102
+ def register_autoload(loader, abspath)
103
+ autoloads[abspath] = loader
99
104
  end
100
105
 
101
106
  # @private
102
- # @param realpath [String]
103
- # @return [void]
104
- def unregister_autoload(realpath)
105
- autoloads.delete(realpath)
107
+ # @sig (String) -> void
108
+ def unregister_autoload(abspath)
109
+ autoloads.delete(abspath)
106
110
  end
107
111
 
108
112
  # @private
109
- # @param cpath [String]
110
- # @param realpath [String]
111
- # @param loader [Zeitwerk::Loader]
112
- # @return [void]
113
- def register_inception(cpath, realpath, loader)
114
- inceptions[cpath] = [realpath, loader]
113
+ # @sig (String, String, Zeitwerk::Loader) -> void
114
+ def register_inception(cpath, abspath, loader)
115
+ inceptions[cpath] = [abspath, loader]
115
116
  end
116
117
 
117
118
  # @private
118
- # @param cpath [String]
119
- # @return [String, nil]
119
+ # @sig (String) -> String?
120
120
  def inception?(cpath)
121
121
  if pair = inceptions[cpath]
122
122
  pair.first
@@ -124,15 +124,13 @@ module Zeitwerk
124
124
  end
125
125
 
126
126
  # @private
127
- # @param path [String]
128
- # @return [Zeitwerk::Loader, nil]
127
+ # @sig (String) -> Zeitwerk::Loader?
129
128
  def loader_for(path)
130
129
  autoloads[path]
131
130
  end
132
131
 
133
132
  # @private
134
- # @param loader [Zeitwerk::Loader]
135
- # @return [void]
133
+ # @sig (Zeitwerk::Loader) -> void
136
134
  def on_unload(loader)
137
135
  autoloads.delete_if { |_path, object| object == loader }
138
136
  inceptions.delete_if { |_cpath, (_path, object)| object == loader }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zeitwerk
4
- VERSION = "2.4.0"
4
+ VERSION = "2.5.0.beta2"
5
5
  end
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.0
4
+ version: 2.5.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xavier Noria
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-14 00:00:00.000000000 Z
11
+ date: 2021-08-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  Zeitwerk implements constant autoloading with Ruby semantics. Each gem
@@ -23,6 +23,7 @@ files:
23
23
  - MIT-LICENSE
24
24
  - README.md
25
25
  - lib/zeitwerk.rb
26
+ - lib/zeitwerk/autoloads.rb
26
27
  - lib/zeitwerk/error.rb
27
28
  - lib/zeitwerk/explicit_namespace.rb
28
29
  - lib/zeitwerk/gem_inflector.rb
@@ -30,6 +31,8 @@ files:
30
31
  - lib/zeitwerk/kernel.rb
31
32
  - lib/zeitwerk/loader.rb
32
33
  - lib/zeitwerk/loader/callbacks.rb
34
+ - lib/zeitwerk/loader/config.rb
35
+ - lib/zeitwerk/loader/helpers.rb
33
36
  - lib/zeitwerk/real_mod_name.rb
34
37
  - lib/zeitwerk/registry.rb
35
38
  - lib/zeitwerk/version.rb
@@ -41,7 +44,7 @@ metadata:
41
44
  changelog_uri: https://github.com/fxn/zeitwerk/blob/master/CHANGELOG.md
42
45
  source_code_uri: https://github.com/fxn/zeitwerk
43
46
  bug_tracker_uri: https://github.com/fxn/zeitwerk/issues
44
- post_install_message:
47
+ post_install_message:
45
48
  rdoc_options: []
46
49
  require_paths:
47
50
  - lib
@@ -49,15 +52,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
49
52
  requirements:
50
53
  - - ">="
51
54
  - !ruby/object:Gem::Version
52
- version: 2.4.4
55
+ version: '2.5'
53
56
  required_rubygems_version: !ruby/object:Gem::Requirement
54
57
  requirements:
55
- - - ">="
58
+ - - ">"
56
59
  - !ruby/object:Gem::Version
57
- version: '0'
60
+ version: 1.3.1
58
61
  requirements: []
59
- rubygems_version: 3.1.2
60
- signing_key:
62
+ rubygems_version: 3.2.22
63
+ signing_key:
61
64
  specification_version: 4
62
65
  summary: Efficient and thread-safe constant autoloader
63
66
  test_files: []