zeitwerk 1.3.2 → 1.3.3
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/lib/zeitwerk/explicit_namespace.rb +1 -10
- data/lib/zeitwerk/loader.rb +31 -1
- data/lib/zeitwerk/registry.rb +0 -10
- data/lib/zeitwerk/version.rb +1 -1
- metadata +2 -3
- data/lib/zeitwerk/ordered_set.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed6569d242e6aec3f736aef043e5c949ce12365d8b1647195820512b17185423
|
4
|
+
data.tar.gz: d046e7d1b35242a562ab09b7bea7a865e43a99b3a03c336fac86e2528b3fa2e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e2c325e9f18a1c81ea64fd6c6078bdba1bdeaed67bbbf316f9294f2b5901d172e7fd0bde3bf256a3049fe7ca363efa0a0d02f246acef53b8e6aed83b43db738
|
7
|
+
data.tar.gz: 321d32b46d05e8eb1e1ce20d7936b0ef42f0f57a89d2f4243d8d2da2421f02b7096e7db88f83e6cc37f9f87e5e7df3c55e74ed7e6ac08c9c27f7a4f251882125
|
@@ -47,15 +47,6 @@ module Zeitwerk
|
|
47
47
|
disable_tracer_if_unneeded
|
48
48
|
end
|
49
49
|
|
50
|
-
# Utility for the test suite
|
51
|
-
#
|
52
|
-
# @private
|
53
|
-
# @return [void]
|
54
|
-
def teardown
|
55
|
-
cpaths.clear
|
56
|
-
tracer.disable
|
57
|
-
end
|
58
|
-
|
59
50
|
def disable_tracer_if_unneeded
|
60
51
|
mutex.synchronize do
|
61
52
|
tracer.disable if cpaths.empty?
|
@@ -67,7 +58,7 @@ module Zeitwerk
|
|
67
58
|
@mutex = Mutex.new
|
68
59
|
@tracer = TracePoint.new(:class) do |event|
|
69
60
|
# Note that it makes sense to compute the hash code unconditionally,
|
70
|
-
# because
|
61
|
+
# because the trace point is disabled if cpaths is empty.
|
71
62
|
if loader = cpaths.delete(event.self.name)
|
72
63
|
loader.on_namespace_loaded(event.self)
|
73
64
|
disable_tracer_if_unneeded
|
data/lib/zeitwerk/loader.rb
CHANGED
@@ -415,7 +415,37 @@ module Zeitwerk
|
|
415
415
|
# @param cname [String]
|
416
416
|
# @return [String, nil]
|
417
417
|
def autoload_for?(parent, cname)
|
418
|
-
parent
|
418
|
+
strict_autoload_path(parent, cname) || Registry.inception?(cpath(parent, cname))
|
419
|
+
end
|
420
|
+
|
421
|
+
# The autoload? predicate takes into account the ancestor chain of the
|
422
|
+
# receiver, like const_defined? and other methods in the constants API do.
|
423
|
+
#
|
424
|
+
# For example, given
|
425
|
+
#
|
426
|
+
# class A
|
427
|
+
# autoload :X, "x.rb"
|
428
|
+
# end
|
429
|
+
#
|
430
|
+
# class B < A
|
431
|
+
# end
|
432
|
+
#
|
433
|
+
# B.autoload?(:X) returns "x.rb".
|
434
|
+
#
|
435
|
+
# We need a way to strictly check in parent ignoring ancestors.
|
436
|
+
#
|
437
|
+
# @param parent [Module]
|
438
|
+
# @param cname [String]
|
439
|
+
# @return [String, nil]
|
440
|
+
def strict_autoload_path(parent, cname)
|
441
|
+
if autoload_path = parent.autoload?(cname)
|
442
|
+
# Due to the use cases we have, we are done if parent is a Module.
|
443
|
+
return autoload_path unless parent.is_a?(Class)
|
444
|
+
# Since file and constant names match, if both parent and one of its
|
445
|
+
# ancestors have an autoload for the same cname, their autoload paths
|
446
|
+
# cannot be equal.
|
447
|
+
return autoload_path unless parent.superclass.autoload?(cname) == autoload_path
|
448
|
+
end
|
419
449
|
end
|
420
450
|
|
421
451
|
# This method is called this way because I prefer `preload` to be the method
|
data/lib/zeitwerk/registry.rb
CHANGED
@@ -137,16 +137,6 @@ module Zeitwerk
|
|
137
137
|
autoloads.delete_if { |_path, object| object == loader }
|
138
138
|
inceptions.delete_if { |_cpath, (_path, object)| object == loader }
|
139
139
|
end
|
140
|
-
|
141
|
-
# Utility for the test suite
|
142
|
-
#
|
143
|
-
# @private
|
144
|
-
# @return [void]
|
145
|
-
def teardown
|
146
|
-
loaders.each(&:unload)
|
147
|
-
loaders.clear
|
148
|
-
loaders_managing_gems.clear
|
149
|
-
end
|
150
140
|
end
|
151
141
|
|
152
142
|
@loaders = []
|
data/lib/zeitwerk/version.rb
CHANGED
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: 1.3.
|
4
|
+
version: 1.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Xavier Noria
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
Zeitwerk implements constant autoloading with Ruby semantics. Each gem
|
@@ -29,7 +29,6 @@ files:
|
|
29
29
|
- lib/zeitwerk/kernel.rb
|
30
30
|
- lib/zeitwerk/loader.rb
|
31
31
|
- lib/zeitwerk/loader/callbacks.rb
|
32
|
-
- lib/zeitwerk/ordered_set.rb
|
33
32
|
- lib/zeitwerk/registry.rb
|
34
33
|
- lib/zeitwerk/version.rb
|
35
34
|
homepage: https://github.com/fxn/zeitwerk
|
data/lib/zeitwerk/ordered_set.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Zeitwerk
|
2
|
-
class OrderedSet
|
3
|
-
def initialize
|
4
|
-
@set = {}
|
5
|
-
end
|
6
|
-
|
7
|
-
def add(object)
|
8
|
-
@set[object] = true
|
9
|
-
end
|
10
|
-
|
11
|
-
def del(object)
|
12
|
-
@set.delete(object)
|
13
|
-
end
|
14
|
-
|
15
|
-
def each
|
16
|
-
@set.each_key do |key|
|
17
|
-
yield key
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|