m2m_keygen 0.4.9 → 0.5.0

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.
Files changed (174) hide show
  1. checksums.yaml +4 -4
  2. data/.overcommit.yml +4 -7
  3. data/.rubocop.yml +19 -16
  4. data/.ruby-version +1 -1
  5. data/.streerc +1 -0
  6. data/.tool-versions +1 -1
  7. data/CHANGELOG.md +60 -1
  8. data/Gemfile +2 -2
  9. data/Gemfile.lock +135 -158
  10. data/README.md +64 -78
  11. data/docs/MIGRATING.md +69 -0
  12. data/docs/SPEC.md +245 -0
  13. data/examples/nonce_store/postgres.rb +40 -0
  14. data/examples/nonce_store/redis.rb +23 -0
  15. data/gemfiles/rack_2.gemfile +5 -0
  16. data/gemfiles/rack_3.gemfile +5 -0
  17. data/lib/m2m_keygen/canonicalizer.rb +57 -0
  18. data/lib/m2m_keygen/nonce_store/disabled.rb +19 -0
  19. data/lib/m2m_keygen/nonce_store/memory.rb +64 -0
  20. data/lib/m2m_keygen/nonce_store.rb +18 -0
  21. data/lib/m2m_keygen/rack_validator.rb +72 -19
  22. data/lib/m2m_keygen/request_signer/signed_request.rb +10 -0
  23. data/lib/m2m_keygen/request_signer.rb +118 -0
  24. data/lib/m2m_keygen/signature.rb +41 -39
  25. data/lib/m2m_keygen/types/params_type.rb +6 -17
  26. data/lib/m2m_keygen/version.rb +1 -1
  27. data/lib/m2m_keygen.rb +6 -0
  28. data/m2m_keygen.gemspec +12 -14
  29. data/sorbet/config +1 -0
  30. data/sorbet/rbi/gems/.gitattributes +1 -0
  31. data/sorbet/rbi/gems/{ast@2.4.2.rbi → ast@2.4.3.rbi} +45 -79
  32. data/sorbet/rbi/gems/{benchmark@0.2.0.rbi → benchmark@0.5.0.rbi} +91 -58
  33. data/sorbet/rbi/gems/bundler-audit@0.9.3.rbi +397 -0
  34. data/sorbet/rbi/gems/byebug@13.0.0.rbi +3651 -0
  35. data/sorbet/rbi/gems/childprocess@5.1.0.rbi +336 -0
  36. data/sorbet/rbi/gems/concurrent-ruby@1.3.7.rbi +384 -0
  37. data/sorbet/rbi/gems/{diff-lcs@1.5.0.rbi → diff-lcs@1.6.2.rbi} +189 -199
  38. data/sorbet/rbi/gems/{docile@1.4.0.rbi → docile@1.4.1.rbi} +147 -147
  39. data/sorbet/rbi/gems/dotenv@3.2.0.rbi +267 -0
  40. data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
  41. data/sorbet/rbi/gems/{faker@2.22.0.rbi → faker@3.8.0.rbi} +8468 -3829
  42. data/sorbet/rbi/gems/{ffi@1.15.5.rbi → ffi@1.17.4.rbi} +1 -0
  43. data/sorbet/rbi/gems/{formatador@1.1.0.rbi → formatador@1.2.3.rbi} +1 -0
  44. data/sorbet/rbi/gems/{guard@2.18.0.rbi → guard@2.20.1.rbi} +1 -0
  45. data/sorbet/rbi/gems/{i18n@1.12.0.rbi → i18n@1.15.2.rbi} +687 -827
  46. data/sorbet/rbi/gems/io-console@0.8.2.rbi +9 -0
  47. data/sorbet/rbi/gems/{json@2.6.2.rbi → json@2.20.0.rbi} +994 -252
  48. data/sorbet/rbi/gems/language_server-protocol@3.17.0.5.rbi +9 -0
  49. data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +189 -0
  50. data/sorbet/rbi/gems/listen@3.10.0.rbi +9 -0
  51. data/sorbet/rbi/gems/logger@1.7.0.rbi +896 -0
  52. data/sorbet/rbi/gems/{lumberjack@1.2.8.rbi → lumberjack@1.4.2.rbi} +1 -0
  53. data/sorbet/rbi/gems/{method_source@1.0.0.rbi → method_source@1.1.0.rbi} +111 -90
  54. data/sorbet/rbi/gems/{overcommit@0.59.1.rbi → overcommit@0.71.0.rbi} +503 -647
  55. data/sorbet/rbi/gems/parallel@2.1.0.rbi +321 -0
  56. data/sorbet/rbi/gems/parser@3.3.11.1.rbi +5229 -0
  57. data/sorbet/rbi/gems/prettier_print@1.2.1.rbi +878 -0
  58. data/sorbet/rbi/gems/prism@1.9.0.rbi +42224 -0
  59. data/sorbet/rbi/gems/pry-byebug@3.12.0.rbi +481 -0
  60. data/sorbet/rbi/gems/{pry@0.14.1.rbi → pry@0.16.0.rbi} +2567 -3550
  61. data/sorbet/rbi/gems/{racc@1.6.0.rbi → racc@1.8.1.rbi} +54 -40
  62. data/sorbet/rbi/gems/rack@3.2.6.rbi +4653 -0
  63. data/sorbet/rbi/gems/{rake@13.0.6.rbi → rake@13.4.2.rbi} +963 -732
  64. data/sorbet/rbi/gems/{rb-inotify@0.10.1.rbi → rb-inotify@0.11.1.rbi} +1 -0
  65. data/sorbet/rbi/gems/rbi@0.3.14.rbi +5519 -0
  66. data/sorbet/rbi/gems/rbs@4.0.3.rbi +6908 -0
  67. data/sorbet/rbi/gems/regexp_parser@2.12.0.rbi +3398 -0
  68. data/sorbet/rbi/gems/reline@0.6.3.rbi +2446 -0
  69. data/sorbet/rbi/gems/require-hooks@0.4.0.rbi +152 -0
  70. data/sorbet/rbi/gems/{rexml@3.2.5.rbi → rexml@3.4.4.rbi} +1085 -894
  71. data/sorbet/rbi/gems/rspec-core@3.13.6.rbi +9475 -0
  72. data/sorbet/rbi/gems/rspec-expectations@3.13.5.rbi +6108 -0
  73. data/sorbet/rbi/gems/rspec-mocks@3.13.8.rbi +4787 -0
  74. data/sorbet/rbi/gems/rspec-support@3.13.7.rbi +1274 -0
  75. data/sorbet/rbi/gems/rspec@3.13.2.rbi +15 -0
  76. data/sorbet/rbi/gems/rspec_in_context@1.2.2.rbi +294 -0
  77. data/sorbet/rbi/gems/rubocop-ast@1.49.1.rbi +7140 -0
  78. data/sorbet/rbi/gems/rubocop-faker@1.3.0.rbi +88 -0
  79. data/sorbet/rbi/gems/rubocop-performance@1.26.1.rbi +3403 -0
  80. data/sorbet/rbi/gems/rubocop-sorbet@0.12.0.rbi +2448 -0
  81. data/sorbet/rbi/gems/rubocop@1.88.1.rbi +63103 -0
  82. data/sorbet/rbi/gems/ruby-lsp@0.26.9.rbi +28 -0
  83. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +988 -0
  84. data/sorbet/rbi/gems/rubydex@0.2.7.rbi +836 -0
  85. data/sorbet/rbi/gems/simplecov-html@0.13.2.rbi +90 -0
  86. data/sorbet/rbi/gems/{simplecov@0.21.2.rbi → simplecov@0.22.0.rbi} +438 -578
  87. data/sorbet/rbi/gems/spoom@1.8.2.rbi +6691 -0
  88. data/sorbet/rbi/gems/syntax_tree@6.3.0.rbi +22090 -0
  89. data/sorbet/rbi/gems/tapioca@0.19.2.rbi +3597 -0
  90. data/sorbet/rbi/gems/{thor@1.2.1.rbi → thor@1.5.0.rbi} +1085 -1171
  91. data/sorbet/rbi/gems/tsort@0.2.0.rbi +389 -0
  92. data/sorbet/rbi/gems/unicode-display_width@3.2.0.rbi +130 -0
  93. data/sorbet/rbi/gems/unicode-emoji@4.2.0.rbi +332 -0
  94. data/sorbet/rbi/gems/{yard-sorbet@0.7.0.rbi → yard-sorbet@0.9.0.rbi} +142 -99
  95. data/sorbet/rbi/gems/{yard@0.9.28.rbi → yard@0.9.44.rbi} +5350 -6316
  96. data/sorbet/rbi/gems/zeitwerk@2.8.2.rbi +1178 -0
  97. metadata +105 -111
  98. data/.prettierrc.js +0 -4
  99. data/docs/M2mKeygen/Error.html +0 -135
  100. data/docs/M2mKeygen/ParamsEncoder.html +0 -321
  101. data/docs/M2mKeygen/RackValidator.html +0 -533
  102. data/docs/M2mKeygen/Signature.html +0 -680
  103. data/docs/M2mKeygen/Types.html +0 -147
  104. data/docs/M2mKeygen.html +0 -157
  105. data/docs/_index.html +0 -182
  106. data/docs/class_list.html +0 -51
  107. data/docs/css/common.css +0 -1
  108. data/docs/css/full_list.css +0 -58
  109. data/docs/css/style.css +0 -497
  110. data/docs/file.README.html +0 -230
  111. data/docs/file_list.html +0 -56
  112. data/docs/frames.html +0 -17
  113. data/docs/index.html +0 -230
  114. data/docs/js/app.js +0 -314
  115. data/docs/js/full_list.js +0 -216
  116. data/docs/js/jquery.js +0 -4
  117. data/docs/method_list.html +0 -139
  118. data/docs/top-level-namespace.html +0 -110
  119. data/lib/m2m_keygen/params_encoder.rb +0 -56
  120. data/package.json +0 -12
  121. data/sig/m2m_keygen.rbs +0 -4
  122. data/sorbet/rbi/gems/activesupport@7.0.3.1.rbi +0 -18608
  123. data/sorbet/rbi/gems/backport@1.2.0.rbi +0 -522
  124. data/sorbet/rbi/gems/bundler-audit@0.9.1.rbi +0 -308
  125. data/sorbet/rbi/gems/byebug@11.1.3.rbi +0 -3603
  126. data/sorbet/rbi/gems/childprocess@4.1.0.rbi +0 -401
  127. data/sorbet/rbi/gems/concurrent-ruby@1.1.10.rbi +0 -11581
  128. data/sorbet/rbi/gems/dotenv@2.8.1.rbi +0 -234
  129. data/sorbet/rbi/gems/e2mmap@0.1.0.rbi +0 -8
  130. data/sorbet/rbi/gems/haml@5.2.2.rbi +0 -3190
  131. data/sorbet/rbi/gems/jaro_winkler@1.5.4.rbi +0 -19
  132. data/sorbet/rbi/gems/kramdown-parser-gfm@1.1.0.rbi +0 -133
  133. data/sorbet/rbi/gems/kramdown@2.4.0.rbi +0 -3261
  134. data/sorbet/rbi/gems/listen@3.7.1.rbi +0 -1181
  135. data/sorbet/rbi/gems/minitest@5.16.3.rbi +0 -1459
  136. data/sorbet/rbi/gems/nokogiri@1.13.8.rbi +0 -6514
  137. data/sorbet/rbi/gems/parallel@1.22.1.rbi +0 -277
  138. data/sorbet/rbi/gems/parser@3.1.2.1.rbi +0 -6826
  139. data/sorbet/rbi/gems/prettier@3.2.0.rbi +0 -22
  140. data/sorbet/rbi/gems/prettier_print@0.1.0.rbi +0 -8
  141. data/sorbet/rbi/gems/pry-byebug@3.10.1.rbi +0 -1222
  142. data/sorbet/rbi/gems/rack@2.2.4.rbi +0 -5630
  143. data/sorbet/rbi/gems/rbi@0.0.15.rbi +0 -3007
  144. data/sorbet/rbi/gems/rbs@2.6.0.rbi +0 -8
  145. data/sorbet/rbi/gems/regexp_parser@2.5.0.rbi +0 -3366
  146. data/sorbet/rbi/gems/reverse_markdown@2.1.1.rbi +0 -389
  147. data/sorbet/rbi/gems/rspec-core@3.11.0.rbi +0 -10786
  148. data/sorbet/rbi/gems/rspec-expectations@3.11.0.rbi +0 -8170
  149. data/sorbet/rbi/gems/rspec-mocks@3.11.1.rbi +0 -5385
  150. data/sorbet/rbi/gems/rspec-support@3.11.0.rbi +0 -1746
  151. data/sorbet/rbi/gems/rspec@3.11.0.rbi +0 -187
  152. data/sorbet/rbi/gems/rspec_in_context@1.1.0.3.rbi +0 -1113
  153. data/sorbet/rbi/gems/rubocop-ast@1.21.0.rbi +0 -7044
  154. data/sorbet/rbi/gems/rubocop-faker@1.1.0.rbi +0 -106
  155. data/sorbet/rbi/gems/rubocop-performance@1.14.3.rbi +0 -2982
  156. data/sorbet/rbi/gems/rubocop-sorbet@0.6.11.rbi +0 -990
  157. data/sorbet/rbi/gems/rubocop@1.35.1.rbi +0 -52002
  158. data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +0 -1239
  159. data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +0 -219
  160. data/sorbet/rbi/gems/solargraph@0.46.0.rbi +0 -9075
  161. data/sorbet/rbi/gems/spoom@1.1.12.rbi +0 -2369
  162. data/sorbet/rbi/gems/syntax_tree-haml@1.3.1.rbi +0 -8
  163. data/sorbet/rbi/gems/syntax_tree-rbs@0.5.0.rbi +0 -8
  164. data/sorbet/rbi/gems/syntax_tree@3.5.0.rbi +0 -8
  165. data/sorbet/rbi/gems/tapioca@0.9.4.rbi +0 -2946
  166. data/sorbet/rbi/gems/temple@0.8.2.rbi +0 -1712
  167. data/sorbet/rbi/gems/tilt@2.0.11.rbi +0 -742
  168. data/sorbet/rbi/gems/tzinfo@2.0.5.rbi +0 -5914
  169. data/sorbet/rbi/gems/unicode-display_width@2.2.0.rbi +0 -48
  170. data/sorbet/rbi/gems/unparser@0.6.5.rbi +0 -4529
  171. data/sorbet/rbi/gems/webrick@1.7.0.rbi +0 -2553
  172. data/sorbet/rbi/gems/zeitwerk@2.6.0.rbi +0 -867
  173. data/sorbet/rbi/manual.rbi +0 -7
  174. data/yarn.lock +0 -20
@@ -0,0 +1,1178 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `zeitwerk` gem.
5
+ # Please instead update this file by running `bin/tapioca gem zeitwerk`.
6
+
7
+
8
+ # pkg:gem/zeitwerk#lib/zeitwerk/core_ext/kernel.rb:3
9
+ module Kernel
10
+ private
11
+
12
+ # pkg:gem/zeitwerk#lib/zeitwerk/core_ext/kernel.rb:23
13
+ def require(path); end
14
+
15
+ # Zeitwerk's main idea is to define autoloads for project constants, and then
16
+ # intercept them when triggered in this thin `Kernel#require` wrapper.
17
+ #
18
+ # That allows us to complete the circle, invoke callbacks, autovivify modules,
19
+ # define autoloads for just autoloaded namespaces, update internal state, etc.
20
+ #
21
+ # On the other hand, if you publish a new version of a gem that is now managed
22
+ # by Zeitwerk, client code can reference directly your classes and modules and
23
+ # should not require anything. But if someone has legacy require calls around,
24
+ # they will work as expected, and in a compatible way. This feature is by now
25
+ # EXPERIMENTAL and UNDOCUMENTED.
26
+ #
27
+ # pkg:gem/zeitwerk#lib/zeitwerk/core_ext/kernel.rb:17
28
+ def zeitwerk_original_require(name); end
29
+
30
+ class << self
31
+ # pkg:gem/zeitwerk#lib/zeitwerk/core_ext/kernel.rb:23
32
+ def require(path); end
33
+
34
+ # pkg:gem/zeitwerk#lib/zeitwerk/core_ext/kernel.rb:19
35
+ def zeitwerk_original_require(name); end
36
+ end
37
+ end
38
+
39
+ class Module
40
+ include ::Zeitwerk::ConstAdded
41
+ end
42
+
43
+ # pkg:gem/zeitwerk#lib/zeitwerk.rb:3
44
+ module Zeitwerk
45
+ class << self
46
+ # This is a dangerous method.
47
+ #
48
+ # @experimental
49
+ #
50
+ # pkg:gem/zeitwerk#lib/zeitwerk.rb:23
51
+ def with_loader; end
52
+ end
53
+ end
54
+
55
+ # pkg:gem/zeitwerk#lib/zeitwerk/error.rb:24
56
+ class Zeitwerk::ConflictingNamespaceDefinitionError < ::Zeitwerk::Error
57
+ # pkg:gem/zeitwerk#lib/zeitwerk/error.rb:26
58
+ def initialize(cpath, location:, conflicting_file:); end
59
+ end
60
+
61
+ # pkg:gem/zeitwerk#lib/zeitwerk/core_ext/module.rb:3
62
+ module Zeitwerk::ConstAdded
63
+ # pkg:gem/zeitwerk#lib/zeitwerk/core_ext/module.rb:5
64
+ def const_added(cname); end
65
+ end
66
+
67
+ # This private class encapsulates pairs (mod, cname).
68
+ #
69
+ # Objects represent the constant `cname` in the class or module object `mod`,
70
+ # and have API to manage them. Examples:
71
+ #
72
+ # cref.path
73
+ # cref.set(value)
74
+ # cref.get
75
+ #
76
+ # The constant may or may not exist in `mod`.
77
+ #
78
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:13
79
+ class Zeitwerk::Cref
80
+ include ::Zeitwerk::RealModName
81
+
82
+ # The type of the first argument is Module because Class < Module, class
83
+ # objects are also valid.
84
+ #
85
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:28
86
+ def initialize(mod, cname); end
87
+
88
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:46
89
+ def autoload(abspath); end
90
+
91
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:41
92
+ def autoload?; end
93
+
94
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:22
95
+ def cname; end
96
+
97
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:51
98
+ def defined?; end
99
+
100
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:61
101
+ def get; end
102
+
103
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:71
104
+ def location; end
105
+
106
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:19
107
+ def mod; end
108
+
109
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:35
110
+ def path; end
111
+
112
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:66
113
+ def remove; end
114
+
115
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:56
116
+ def set(value); end
117
+
118
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref.rb:38
119
+ def to_s; end
120
+ end
121
+
122
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:73
123
+ class Zeitwerk::Cref::Map
124
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:75
125
+ def initialize; end
126
+
127
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:90
128
+ def [](cref); end
129
+
130
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:82
131
+ def []=(cref, value); end
132
+
133
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:147
134
+ def clear; end
135
+
136
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:105
137
+ def delete(cref); end
138
+
139
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:124
140
+ def delete_by_value(value); end
141
+
142
+ # Ad-hoc for loader_for, called from const_added. That is a hot path, I prefer
143
+ # to not create a cref in every call, since that is global.
144
+ #
145
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:113
146
+ def delete_mod_cname(mod, cname); end
147
+
148
+ # Order of yielded crefs is undefined.
149
+ #
150
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:136
151
+ def each_key; end
152
+
153
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:154
154
+ def empty?; end
155
+
156
+ # pkg:gem/zeitwerk#lib/zeitwerk/cref/map.rb:97
157
+ def get_or_set(cref, &block); end
158
+ end
159
+
160
+ # pkg:gem/zeitwerk#lib/zeitwerk/error.rb:4
161
+ class Zeitwerk::Error < ::StandardError; end
162
+
163
+ # pkg:gem/zeitwerk#lib/zeitwerk/gem_inflector.rb:4
164
+ class Zeitwerk::GemInflector < ::Zeitwerk::Inflector
165
+ # pkg:gem/zeitwerk#lib/zeitwerk/gem_inflector.rb:6
166
+ def initialize(root_file); end
167
+
168
+ # pkg:gem/zeitwerk#lib/zeitwerk/gem_inflector.rb:13
169
+ def camelize(basename, abspath); end
170
+ end
171
+
172
+ # @private
173
+ #
174
+ # pkg:gem/zeitwerk#lib/zeitwerk/gem_loader.rb:5
175
+ class Zeitwerk::GemLoader < ::Zeitwerk::Loader
176
+ # pkg:gem/zeitwerk#lib/zeitwerk/gem_loader.rb:19
177
+ def initialize(root_file, namespace:, warn_on_extra_files:); end
178
+
179
+ # pkg:gem/zeitwerk#lib/zeitwerk/gem_loader.rb:34
180
+ def setup; end
181
+
182
+ private
183
+
184
+ # pkg:gem/zeitwerk#lib/zeitwerk/gem_loader.rb:42
185
+ def warn_on_extra_files; end
186
+
187
+ class << self
188
+ # @private
189
+ #
190
+ # pkg:gem/zeitwerk#lib/zeitwerk/gem_loader.rb:14
191
+ def __new(root_file, namespace:, warn_on_extra_files:); end
192
+
193
+ private
194
+
195
+ # pkg:gem/zeitwerk#lib/zeitwerk/gem_loader.rb:10
196
+ def new(*_arg0); end
197
+ end
198
+ end
199
+
200
+ # pkg:gem/zeitwerk#lib/zeitwerk/inflector.rb:4
201
+ class Zeitwerk::Inflector
202
+ # Very basic snake case -> camel case conversion.
203
+ #
204
+ # inflector = Zeitwerk::Inflector.new
205
+ # inflector.camelize('post', ...) # => 'Post'
206
+ # inflector.camelize('users_controller', ...) # => 'UsersController'
207
+ # inflector.camelize('api', ...) # => 'Api'
208
+ #
209
+ # Takes into account hard-coded mappings configured with `inflect`.
210
+ #
211
+ # pkg:gem/zeitwerk#lib/zeitwerk/inflector.rb:15
212
+ def camelize(basename, _abspath); end
213
+
214
+ # Configures hard-coded inflections:
215
+ #
216
+ # inflector = Zeitwerk::Inflector.new
217
+ # inflector.inflect(
218
+ # 'html_parser' => 'HTMLParser',
219
+ # 'mysql_adapter' => 'MySQLAdapter'
220
+ # )
221
+ #
222
+ # inflector.camelize('html_parser', abspath) # => 'HTMLParser'
223
+ # inflector.camelize('mysql_adapter', abspath) # => 'MySQLAdapter'
224
+ # inflector.camelize('users_controller', abspath) # => 'UsersController'
225
+ #
226
+ # pkg:gem/zeitwerk#lib/zeitwerk/inflector.rb:32
227
+ def inflect(inflections); end
228
+
229
+ private
230
+
231
+ # Hard-coded basename to constant name user maps that override the default
232
+ # inflection logic.
233
+ #
234
+ # pkg:gem/zeitwerk#lib/zeitwerk/inflector.rb:42
235
+ def overrides; end
236
+ end
237
+
238
+ # This is a private module.
239
+ #
240
+ # pkg:gem/zeitwerk#lib/zeitwerk/internal.rb:4
241
+ module Zeitwerk::Internal
242
+ # pkg:gem/zeitwerk#lib/zeitwerk/internal.rb:6
243
+ def internal(method_name); end
244
+ end
245
+
246
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:7
247
+ class Zeitwerk::Loader
248
+ include ::Zeitwerk::RealModName
249
+ include ::Zeitwerk::Loader::Callbacks
250
+ include ::Zeitwerk::Loader::Helpers
251
+ include ::Zeitwerk::Loader::Config
252
+ include ::Zeitwerk::Loader::EagerLoad
253
+ extend ::Zeitwerk::Internal
254
+ extend ::Zeitwerk::RealModName
255
+
256
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:107
257
+ def initialize; end
258
+
259
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:66
260
+ def __autoloaded_dirs; end
261
+
262
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:32
263
+ def __autoloads; end
264
+
265
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:56
266
+ def __inceptions; end
267
+
268
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:382
269
+ def __log; end
270
+
271
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:85
272
+ def __namespace_dirs; end
273
+
274
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:377
275
+ def __shadowed_file?(file); end
276
+
277
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:96
278
+ def __shadowed_files; end
279
+
280
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:76
281
+ def __to_unload; end
282
+
283
+ # This is an internal method.
284
+ #
285
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:166
286
+ def __unload; end
287
+
288
+ # Returns a hash that maps the absolute paths of the managed files and
289
+ # directories to their respective expected constant paths.
290
+ #
291
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:258
292
+ def all_expected_cpaths; end
293
+
294
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:290
295
+ def cpath_expected_at(path); end
296
+
297
+ # Unloads all loaded code, and calls setup again so that the loader is able
298
+ # to pick any changes in the file system.
299
+ #
300
+ # This method is not thread-safe, please see how this can be achieved by
301
+ # client code in the README of the project.
302
+ #
303
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:241
304
+ def reload; end
305
+
306
+ # Sets autoloads in the root namespaces.
307
+ #
308
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:130
309
+ def setup; end
310
+
311
+ # Removes loaded constants and configured autoloads.
312
+ #
313
+ # The objects the constants stored are no longer reachable through them. In
314
+ # addition, since said objects are normally not referenced from anywhere
315
+ # else, they are eligible for garbage collection, which would effectively
316
+ # unload them.
317
+ #
318
+ # This method is public but undocumented. Main interface is `reload`, which
319
+ # means `unload` + `setup`. This one is available to be used together with
320
+ # `unregister`, which is undocumented too.
321
+ #
322
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:156
323
+ def unload; end
324
+
325
+ # Says if the given constant path would be unloaded on reload. This
326
+ # predicate returns `false` if reloading is disabled.
327
+ #
328
+ # This is an undocumented method that I wrote to help transition from the
329
+ # classic autoloader in Rails. Its usage was removed from Rails in 7.0.
330
+ #
331
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:346
332
+ def unloadable_cpath?(cpath); end
333
+
334
+ # Returns an array with the constant paths that would be unloaded on reload.
335
+ # This predicate returns an empty array if reloading is disabled.
336
+ #
337
+ # This is an undocumented method that I wrote to help transition from the
338
+ # classic autoloader in Rails. Its usage was removed from Rails in 7.0.
339
+ #
340
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:357
341
+ def unloadable_cpaths; end
342
+
343
+ # This is a dangerous method.
344
+ #
345
+ # @experimental
346
+ #
347
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:365
348
+ def unregister; end
349
+
350
+ private
351
+
352
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:616
353
+ def autoload_path_set_by_me_for?(cref); end
354
+
355
+ # We keep track of autoloaded directories to remove them from the registry
356
+ # at the end of eager loading.
357
+ #
358
+ # Files are removed as they are autoloaded, but directories need to wait due
359
+ # to concurrency (see why in Zeitwerk::Loader::Callbacks#on_dir_autoloaded).
360
+ #
361
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:65
362
+ def autoloaded_dirs; end
363
+
364
+ # Maps absolute paths for which an autoload has been set ---and not
365
+ # executed--- to their corresponding Zeitwerk::Cref object.
366
+ #
367
+ # '/Users/fxn/blog/app/models/user.rb' => #<Zeitwerk::Cref:... @mod=Object, @cname=:User, ...>,
368
+ # '/Users/fxn/blog/app/models/hotel/pricing.rb' => #<Zeitwerk::Cref:... @mod=Hotel, @cname=:Pricing, ...>,
369
+ # ...
370
+ #
371
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:31
372
+ def autoloads; end
373
+
374
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:598
375
+ def define_autoload(cref, abspath); end
376
+
377
+ # Scans `dir` and sets autoloads in `mod` for the constants its contents are
378
+ # expected to define.
379
+ #
380
+ # The `external` flag indicates whether `mod` has been externally defined,
381
+ # as is the case with root namespaces or reopened third-party namespaces.
382
+ #
383
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:497
384
+ def define_autoloads_for_dir(dir, mod, external:); end
385
+
386
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:103
387
+ def dirs_autoload_monitor; end
388
+
389
+ # When the path passed to Module#autoload is in the stack of features being
390
+ # loaded at the moment, Ruby passes. For example, Module#autoload? returns
391
+ # `nil` even if the autoload has not been attempted. See
392
+ #
393
+ # https://bugs.ruby-lang.org/issues/21035
394
+ #
395
+ # We call these "inceptions".
396
+ #
397
+ # A common case is the entry point of gems managed by Zeitwerk. Their main
398
+ # file is normally required and, while doing so, the loader sets an autoload
399
+ # on the gem namespace. That autoload hits this edge case.
400
+ #
401
+ # There is some logic that needs to know if an autoload for a given constant
402
+ # already exists. We check Module#autoload? first, and fallback to the
403
+ # inceptions just in case.
404
+ #
405
+ # This map keeps track of pairs (cref, autoload_path) found by the loader.
406
+ # The object Zeitwerk::Registry.inceptions, on the other hand, acts as a
407
+ # global registry for them.
408
+ #
409
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:55
410
+ def inceptions; end
411
+
412
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:382
413
+ def log; end
414
+
415
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:99
416
+ def mutex; end
417
+
418
+ # Maps namespace crefs to the directories that conform the namespace.
419
+ #
420
+ # When these crefs get defined we know their children are spread over those
421
+ # directories. We'll visit them to set up the corresponding autoloads.
422
+ #
423
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:84
424
+ def namespace_dirs; end
425
+
426
+ # `dir` is the directory that would have autovivified a namespace. `file` is
427
+ # the file where we've found the namespace is explicitly defined.
428
+ #
429
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:585
430
+ def promote_namespace_from_implicit_to_explicit(dir:, file:, cref:); end
431
+
432
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:649
433
+ def raise_if_conflicting_root_dir(root_dir); end
434
+
435
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:625
436
+ def register_explicit_namespace(cref); end
437
+
438
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:635
439
+ def register_inception(cref, abspath); end
440
+
441
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:659
442
+ def run_on_unload_callbacks(cref, value, abspath); end
443
+
444
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:377
445
+ def shadowed_file?(file); end
446
+
447
+ # A shadowed file is a file managed by this loader that is ignored when
448
+ # setting autoloads because its matching constant is already taken.
449
+ #
450
+ # This private set is populated lazily, as we descend. For example, if the
451
+ # loader has only scanned the top-level, `shadowed_files` does not have the
452
+ # shadowed files that may exist deep in the project tree.
453
+ #
454
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:95
455
+ def shadowed_files; end
456
+
457
+ # If reloading is enabled, this collection maps autoload paths to their
458
+ # autoloaded crefs.
459
+ #
460
+ # On unload, the autoload paths are passed to callbacks, files deleted from
461
+ # $LOADED_FEATURES, and the crefs are deleted.
462
+ #
463
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:75
464
+ def to_unload; end
465
+
466
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:666
467
+ def unload_autoload(cref); end
468
+
469
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:672
470
+ def unload_cref(cref); end
471
+
472
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:630
473
+ def unregister_explicit_namespaces; end
474
+
475
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:641
476
+ def unregister_inceptions; end
477
+
478
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:521
479
+ def visit_file(cref, file); end
480
+
481
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:545
482
+ def visit_subdir(cref, subdir, external:); end
483
+
484
+ class << self
485
+ # Returns an array with the absolute paths of the root directories of all
486
+ # registered loaders. This is a read-only collection.
487
+ #
488
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:481
489
+ def all_dirs; end
490
+
491
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:397
492
+ def default_logger; end
493
+
494
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:397
495
+ def default_logger=(_arg0); end
496
+
497
+ # Broadcasts `eager_load` to all loaders. Those that have not been setup
498
+ # are skipped.
499
+ #
500
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:453
501
+ def eager_load_all; end
502
+
503
+ # Broadcasts `eager_load_namespace` to all loaders. Those that have not
504
+ # been setup are skipped.
505
+ #
506
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:467
507
+ def eager_load_namespace(mod); end
508
+
509
+ # This is a shortcut for
510
+ #
511
+ # require 'zeitwerk'
512
+ #
513
+ # loader = Zeitwerk::Loader.new
514
+ # loader.tag = File.basename(__FILE__, '.rb')
515
+ # loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
516
+ # loader.push_dir(__dir__)
517
+ #
518
+ # except that this method returns the same object in subsequent calls from
519
+ # the same file, in the unlikely case the gem wants to be able to reload.
520
+ #
521
+ # This method returns a subclass of Zeitwerk::Loader, but the exact type
522
+ # is private, client code can only rely on the interface.
523
+ #
524
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:415
525
+ def for_gem(warn_on_extra_files: T.unsafe(nil)); end
526
+
527
+ # This is a shortcut for
528
+ #
529
+ # require 'zeitwerk'
530
+ #
531
+ # loader = Zeitwerk::Loader.new
532
+ # loader.tag = namespace.name + '-' + File.basename(__FILE__, '.rb')
533
+ # loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
534
+ # loader.push_dir(__dir__, namespace: namespace)
535
+ #
536
+ # except that this method returns the same object in subsequent calls from
537
+ # the same file, in the unlikely case the gem wants to be able to reload.
538
+ #
539
+ # This method returns a subclass of Zeitwerk::Loader, but the exact type
540
+ # is private, client code can only rely on the interface.
541
+ #
542
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader.rb:436
543
+ def for_gem_extension(namespace); end
544
+ end
545
+ end
546
+
547
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/callbacks.rb:3
548
+ module Zeitwerk::Loader::Callbacks
549
+ extend ::Zeitwerk::Internal
550
+
551
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/callbacks.rb:39
552
+ def __on_dir_autoloaded(dir); end
553
+
554
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/callbacks.rb:9
555
+ def __on_file_autoloaded(file); end
556
+
557
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/callbacks.rb:77
558
+ def __on_namespace_loaded(cref, namespace); end
559
+
560
+ private
561
+
562
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/callbacks.rb:39
563
+ def on_dir_autoloaded(dir); end
564
+
565
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/callbacks.rb:9
566
+ def on_file_autoloaded(file); end
567
+
568
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/callbacks.rb:77
569
+ def on_namespace_loaded(cref, namespace); end
570
+
571
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/callbacks.rb:88
572
+ def run_on_load_callbacks(cpath, value, abspath); end
573
+ end
574
+
575
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:6
576
+ module Zeitwerk::Loader::Config
577
+ include ::Zeitwerk::RealModName
578
+ extend ::Zeitwerk::Internal
579
+
580
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:103
581
+ def initialize; end
582
+
583
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:369
584
+ def __collapse?(dir); end
585
+
586
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:374
587
+ def __collapse_parent?(dir); end
588
+
589
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:352
590
+ def __ignored_path?(abspath); end
591
+
592
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:339
593
+ def __ignores?(abspath); end
594
+
595
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:364
596
+ def __root_dir?(dir); end
597
+
598
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:33
599
+ def __roots; end
600
+
601
+ # Configure directories or glob patterns to be collapsed.
602
+ #
603
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:245
604
+ def collapse(*glob_patterns); end
605
+
606
+ # If `namespaces` is falsey (default), returns an array with the absolute
607
+ # paths of the root directories as strings. If truthy, returns a hash table
608
+ # instead. Keys are the absolute paths of the root directories as strings,
609
+ # values are their corresponding namespaces, class or module objects.
610
+ #
611
+ # If `ignored` is falsey (default), ignored root directories are filtered out.
612
+ #
613
+ # These are read-only collections, please add to them with `push_dir`.
614
+ #
615
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:186
616
+ def dirs(namespaces: T.unsafe(nil), ignored: T.unsafe(nil)); end
617
+
618
+ # Let eager load ignore the given files or directories. The constants defined
619
+ # in those files are still autoloadable.
620
+ #
621
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:227
622
+ def do_not_eager_load(*paths); end
623
+
624
+ # You need to call this method before setup in order to be able to reload.
625
+ # There is no way to undo this, either you want to reload or you don't.
626
+ #
627
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:206
628
+ def enable_reloading; end
629
+
630
+ # Configure files, directories, or glob patterns to be totally ignored.
631
+ #
632
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:234
633
+ def ignore(*glob_patterns); end
634
+
635
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:14
636
+ def inflector; end
637
+
638
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:14
639
+ def inflector=(_arg0); end
640
+
641
+ # Logs to `$stdout`, handy shortcut for debugging.
642
+ #
643
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:331
644
+ def log!; end
645
+
646
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:17
647
+ def logger; end
648
+
649
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:17
650
+ def logger=(_arg0); end
651
+
652
+ # Basename of files that define namespaces. For example, if `nsfile` is
653
+ # 'ns.rb', then `foo/ns.rb` defines the `Foo` namespace.
654
+ #
655
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:39
656
+ def nsfile; end
657
+
658
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:165
659
+ def nsfile=(nsfile); end
660
+
661
+ # Configure a block to be invoked once a certain constant path is loaded.
662
+ # Supports multiple callbacks, and if there are many, they are executed in
663
+ # the order in which they were defined.
664
+ #
665
+ # loader.on_load('SomeApiClient') do |klass, _abspath|
666
+ # klass.endpoint = 'https://api.dev'
667
+ # end
668
+ #
669
+ # Can also be configured for any constant loaded:
670
+ #
671
+ # loader.on_load do |cpath, value, abspath|
672
+ # # ...
673
+ # end
674
+ #
675
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:284
676
+ def on_load(cpath = T.unsafe(nil), &block); end
677
+
678
+ # Configure a block to be called after setup and on each reload.
679
+ # If setup was already done, the block runs immediately.
680
+ #
681
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:261
682
+ def on_setup(&block); end
683
+
684
+ # Configure a block to be invoked right before a certain constant is removed.
685
+ # Supports multiple callbacks, and if there are many, they are executed in the
686
+ # order in which they were defined.
687
+ #
688
+ # loader.on_unload('Country') do |klass, _abspath|
689
+ # klass.clear_cache
690
+ # end
691
+ #
692
+ # Can also be configured for any removed constant:
693
+ #
694
+ # loader.on_unload do |cpath, value, abspath|
695
+ # # ...
696
+ # end
697
+ #
698
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:314
699
+ def on_unload(cpath = T.unsafe(nil), &block); end
700
+
701
+ # Pushes `path` to the list of root directories.
702
+ #
703
+ # Raises `Zeitwerk::Error` if `path` does not exist, or if another loader in
704
+ # the same process already manages that directory or one of its ascendants or
705
+ # descendants.
706
+ #
707
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:129
708
+ def push_dir(path, namespace: T.unsafe(nil)); end
709
+
710
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:219
711
+ def reloading_enabled?; end
712
+
713
+ # Returns the loader's tag.
714
+ #
715
+ # Implemented as a method instead of via attr_reader for symmetry with the
716
+ # writer below.
717
+ #
718
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:153
719
+ def tag; end
720
+
721
+ # Sets a tag for the loader, useful for logging.
722
+ #
723
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:160
724
+ def tag=(tag); end
725
+
726
+ private
727
+
728
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:357
729
+ def actual_roots; end
730
+
731
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:369
732
+ def collapse?(dir); end
733
+
734
+ # The actual collection of absolute directory names at the time the collapse
735
+ # glob patterns were expanded. Computed on setup and recomputed on reload.
736
+ #
737
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:65
738
+ def collapse_dirs; end
739
+
740
+ # Absolute paths of directories or glob patterns to be collapsed.
741
+ #
742
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:58
743
+ def collapse_glob_patterns; end
744
+
745
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:374
746
+ def collapse_parent?(dir); end
747
+
748
+ # Absolute paths of directories that are parents of collapsed directories.
749
+ # This is a cache to optimize some tree walks. Computed on setup and
750
+ # recomputed on reload.
751
+ #
752
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:73
753
+ def collapse_parents; end
754
+
755
+ # Absolute paths of files or directories not to be eager loaded.
756
+ #
757
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:79
758
+ def eager_load_exclusions; end
759
+
760
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:379
761
+ def excluded_from_eager_load?(abspath); end
762
+
763
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:397
764
+ def expand_glob_patterns(glob_patterns); end
765
+
766
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:392
767
+ def expand_paths(paths); end
768
+
769
+ # Absolute paths of files, directories, or glob patterns to be ignored.
770
+ #
771
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:44
772
+ def ignored_glob_patterns; end
773
+
774
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:352
775
+ def ignored_path?(abspath); end
776
+
777
+ # The actual collection of absolute file and directory names at the time the
778
+ # ignored glob patterns were expanded. Computed on setup, and recomputed on
779
+ # reload.
780
+ #
781
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:52
782
+ def ignored_paths; end
783
+
784
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:339
785
+ def ignores?(abspath); end
786
+
787
+ # User-oriented callbacks to be fired when a constant is loaded.
788
+ #
789
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:92
790
+ def on_load_callbacks; end
791
+
792
+ # User-oriented callbacks to be fired on setup and on reload.
793
+ #
794
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:85
795
+ def on_setup_callbacks; end
796
+
797
+ # User-oriented callbacks to be fired before constants are removed.
798
+ #
799
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:99
800
+ def on_unload_callbacks; end
801
+
802
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:409
803
+ def recompute_collapse_dirs; end
804
+
805
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:414
806
+ def recompute_collapse_parents; end
807
+
808
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:404
809
+ def recompute_ignored_paths; end
810
+
811
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:364
812
+ def root_dir?(dir); end
813
+
814
+ # Absolute paths of the root directories, mapped to their respective root namespaces:
815
+ #
816
+ # '/Users/fxn/blog/app/channels' => Object,
817
+ # '/Users/fxn/blog/app/adapters' => ActiveJob::QueueAdapters,
818
+ # ...
819
+ #
820
+ # Stored in a hash to preserve order, easily handle duplicates, and have a
821
+ # fast lookup by directory.
822
+ #
823
+ # This is a private collection maintained by the loader. The public
824
+ # interface for it is `push_dir` and `dirs`.
825
+ #
826
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:32
827
+ def roots; end
828
+ end
829
+
830
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/config.rb:10
831
+ Zeitwerk::Loader::Config::UNDEFINED = T.let(T.unsafe(nil), Object)
832
+
833
+ # @private
834
+ #
835
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/constant_path_validator.rb:2
836
+ class Zeitwerk::Loader::ConstantPathValidator
837
+ # Technically, this validation works with symbols, but API boundary restricts
838
+ # input to strings, so we assume strings, and we test strings.
839
+ #
840
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/constant_path_validator.rb:10
841
+ def validate!(possible_cpath); end
842
+ end
843
+
844
+ # :nodoc
845
+ #
846
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/constant_path_validator.rb:3
847
+ module Zeitwerk::Loader::ConstantPathValidator::CNAME_VALIDATOR; end
848
+
849
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/eager_load.rb:1
850
+ module Zeitwerk::Loader::EagerLoad
851
+ # Eager loads all files in the root directories, recursively. Files do not
852
+ # need to be in `$LOAD_PATH`, absolute file names are used.
853
+ #
854
+ # Ignored files are not eager loaded. You can opt-out specifically in specific
855
+ # files and directories with `do_not_eager_load`, and that can be overridden
856
+ # passing `force: true`.
857
+ #
858
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/eager_load.rb:10
859
+ def eager_load(force: T.unsafe(nil)); end
860
+
861
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/eager_load.rb:33
862
+ def eager_load_dir(path); end
863
+
864
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/eager_load.rb:74
865
+ def eager_load_namespace(mod); end
866
+
867
+ # Loads the given Ruby file.
868
+ #
869
+ # Raises if the argument is ignored, shadowed, or not managed by the receiver.
870
+ #
871
+ # The method is implemented as `constantize` for files, in a sense, to be able
872
+ # to descend orderly and make sure the file is loadable.
873
+ #
874
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/eager_load.rb:116
875
+ def load_file(path); end
876
+
877
+ private
878
+
879
+ # The caller is responsible for making sure `namespace` is the namespace that
880
+ # corresponds to `dir`.
881
+ #
882
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/eager_load.rb:162
883
+ def actual_eager_load_dir(dir, namespace, force: T.unsafe(nil)); end
884
+
885
+ # In order to invoke this method, the caller has to ensure `child` is a
886
+ # strict namespace descendant of `root_namespace`.
887
+ #
888
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/eager_load.rb:191
889
+ def eager_load_child_namespace(child, child_name, root_dir, root_namespace); end
890
+ end
891
+
892
+ # This private class encapsulates interactions with the file system.
893
+ #
894
+ # It is used to list directories and check file types, and it encodes the
895
+ # conventions documented in the README.
896
+ #
897
+ # @private
898
+ #
899
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:9
900
+ class Zeitwerk::Loader::FileSystem
901
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:11
902
+ def initialize(loader); end
903
+
904
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:120
905
+ def dir?(path); end
906
+
907
+ # Returns the absolute path to an nsfile in `dir`, if there is exactly one. If
908
+ # there is none, it returns `nil`.
909
+ #
910
+ # This method accounts for collapsed directories, which conceptually allow for
911
+ # multiple nsfiles. If two are found, Zeitwerk::ConflictingNamespaceDefinitionError is raised.
912
+ #
913
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:71
914
+ def has_exactly_one_nsfile?(cref, dir); end
915
+
916
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:125
917
+ def hidden?(basename); end
918
+
919
+ # This method lists directories, filtering out the following:
920
+ #
921
+ # - Hidden entries.
922
+ # - Ignored entries.
923
+ # - Files whose extension is not `.rb`.
924
+ # - Nested root directories, since they represent separate trees.
925
+ # - Subdirectories that (recursively) contain no Ruby files.
926
+ #
927
+ # If `collapse` is true, collapsed directories are not yielded, instead, the
928
+ # method recurses so that the caller gets a conceptually flat listing.
929
+ #
930
+ # For every entry that is not excluded, `ls` yields its basename, absolute
931
+ # path, and file type, which can only be :file or :directory.
932
+ #
933
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:30
934
+ def ls(dir, collapse: T.unsafe(nil), &block); end
935
+
936
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:115
937
+ def rb_extension?(path); end
938
+
939
+ # Encodes the documented conventions.
940
+ #
941
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:106
942
+ def supported_ftype?(abspath); end
943
+
944
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:56
945
+ def walk_up(abspath); end
946
+
947
+ private
948
+
949
+ # Available in Ruby 4.1.
950
+ #
951
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:198
952
+ def each_ruby_file_or_directory(dir); end
953
+
954
+ # Looks for a Ruby file using breadth-first search. This type of search is
955
+ # important to list as less directories as possible and return fast in the
956
+ # common case in which there are Ruby files in the passed directory.
957
+ #
958
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:136
959
+ def has_at_least_one_ruby_file?(dir); end
960
+
961
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/file_system.rb:151
962
+ def relevant_dir_entries(dir); end
963
+ end
964
+
965
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/helpers.rb:3
966
+ module Zeitwerk::Loader::Helpers
967
+ private
968
+
969
+ # pkg:gem/zeitwerk#lib/zeitwerk/loader/helpers.rb:5
970
+ def cname_for(basename, abspath); end
971
+ end
972
+
973
+ # pkg:gem/zeitwerk#lib/zeitwerk/error.rb:14
974
+ class Zeitwerk::NameError < ::NameError; end
975
+
976
+ # pkg:gem/zeitwerk#lib/zeitwerk/null_inflector.rb:1
977
+ class Zeitwerk::NullInflector
978
+ # pkg:gem/zeitwerk#lib/zeitwerk/null_inflector.rb:3
979
+ def camelize(basename, _abspath); end
980
+ end
981
+
982
+ # pkg:gem/zeitwerk#lib/zeitwerk/real_mod_name.rb:3
983
+ module Zeitwerk::RealModName
984
+ # Returns the real name of the class or module.
985
+ #
986
+ # We need this indirection because the `name` method can be overridden, and
987
+ # because in practice what we really need is the constant paths of modules
988
+ # with a permanent name, not so much what the user considers to be the name of
989
+ # a certain class or module of theirs.
990
+ #
991
+ # pkg:gem/zeitwerk#lib/zeitwerk/real_mod_name.rb:16
992
+ def real_mod_name(mod); end
993
+ end
994
+
995
+ # pkg:gem/zeitwerk#lib/zeitwerk/real_mod_name.rb:5
996
+ Zeitwerk::RealModName::UNBOUND_METHOD_MODULE_NAME = T.let(T.unsafe(nil), UnboundMethod)
997
+
998
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry.rb:4
999
+ module Zeitwerk::Registry
1000
+ class << self
1001
+ # Maps absolute paths to the loaders responsible for them.
1002
+ #
1003
+ # This information is used by our decorated `Kernel#require` to be able to
1004
+ # invoke callbacks and autovivify modules.
1005
+ #
1006
+ # @private
1007
+ #
1008
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry.rb:31
1009
+ def autoloads; end
1010
+
1011
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry.rb:48
1012
+ def conflicting_root_dir?(loader, new_root_dir); end
1013
+
1014
+ # @private
1015
+ #
1016
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry.rb:35
1017
+ def explicit_namespaces; end
1018
+
1019
+ # Registers gem loaders to let `for_gem` be idempotent in case of reload.
1020
+ #
1021
+ # @private
1022
+ #
1023
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry.rb:22
1024
+ def gem_loaders_by_root_file; end
1025
+
1026
+ # @private
1027
+ #
1028
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry.rb:39
1029
+ def inceptions; end
1030
+
1031
+ # This method returns always a loader, the same instance for the same root
1032
+ # file. That is how Zeitwerk::Loader.for_gem is idempotent.
1033
+ #
1034
+ # @private
1035
+ #
1036
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry.rb:77
1037
+ def loader_for_gem(root_file, namespace:, warn_on_extra_files:); end
1038
+
1039
+ # Keeps track of all loaders. Useful to broadcast messages and to prevent
1040
+ # them from being garbage collected.
1041
+ #
1042
+ # @private
1043
+ #
1044
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry.rb:16
1045
+ def loaders; end
1046
+
1047
+ # @private
1048
+ #
1049
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry.rb:43
1050
+ def unregister_loader(loader); end
1051
+ end
1052
+ end
1053
+
1054
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/autoloads.rb:2
1055
+ class Zeitwerk::Registry::Autoloads
1056
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/autoloads.rb:4
1057
+ def initialize; end
1058
+
1059
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/autoloads.rb:34
1060
+ def clear; end
1061
+
1062
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/autoloads.rb:29
1063
+ def empty?; end
1064
+
1065
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/autoloads.rb:9
1066
+ def register(abspath, loader); end
1067
+
1068
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/autoloads.rb:14
1069
+ def registered?(path); end
1070
+
1071
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/autoloads.rb:19
1072
+ def unregister(abspath); end
1073
+
1074
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/autoloads.rb:24
1075
+ def unregister_loader(loader); end
1076
+ end
1077
+
1078
+ # A registry for explicit namespaces.
1079
+ #
1080
+ # When a loader determines that a certain file should define an explicit
1081
+ # namespace, it registers it here, associating its cref with itself.
1082
+ #
1083
+ # If the namespace is autoloaded, our const_added callback retrieves its
1084
+ # loader by calling loader_for. That way, the loader is able to scan the
1085
+ # subdirectories that conform the namespace and set autoloads for their
1086
+ # expected constants just in time.
1087
+ #
1088
+ # Once autoloaded, the namespace is unregistered.
1089
+ #
1090
+ # The implementation assumes an explicit namespace is managed by one loader.
1091
+ # Loaders that reopen namespaces owned by other projects are responsible for
1092
+ # loading their constant before setup. This is documented.
1093
+ #
1094
+ # **This is a private module.**
1095
+ #
1096
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/explicit_namespaces.rb:21
1097
+ class Zeitwerk::Registry::ExplicitNamespaces
1098
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/explicit_namespaces.rb:23
1099
+ def initialize; end
1100
+
1101
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/explicit_namespaces.rb:57
1102
+ def clear; end
1103
+
1104
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/explicit_namespaces.rb:40
1105
+ def loader_for(mod, cname); end
1106
+
1107
+ # Registers `cref` as being the constant path of an explicit namespace
1108
+ # managed by `loader`.
1109
+ #
1110
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/explicit_namespaces.rb:35
1111
+ def register(cref, loader); end
1112
+
1113
+ # This is an internal method only used by the test suite.
1114
+ #
1115
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/explicit_namespaces.rb:52
1116
+ def registered?(cref); end
1117
+
1118
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/explicit_namespaces.rb:45
1119
+ def unregister_loader(loader); end
1120
+ end
1121
+
1122
+ # Loaders know their own inceptions, but there is a use case in which we need
1123
+ # to know if a given cpath is an inception globally. This is what this
1124
+ # registry is for.
1125
+ #
1126
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/inceptions.rb:5
1127
+ class Zeitwerk::Registry::Inceptions
1128
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/inceptions.rb:7
1129
+ def initialize; end
1130
+
1131
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/inceptions.rb:27
1132
+ def clear; end
1133
+
1134
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/inceptions.rb:12
1135
+ def register(cref, abspath); end
1136
+
1137
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/inceptions.rb:17
1138
+ def registered?(cref); end
1139
+
1140
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/inceptions.rb:22
1141
+ def unregister(cref); end
1142
+ end
1143
+
1144
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/loaders.rb:2
1145
+ class Zeitwerk::Registry::Loaders
1146
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/loaders.rb:4
1147
+ def initialize; end
1148
+
1149
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/loaders.rb:29
1150
+ def clear; end
1151
+
1152
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/loaders.rb:9
1153
+ def each(&block); end
1154
+
1155
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/loaders.rb:14
1156
+ def register(loader); end
1157
+
1158
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/loaders.rb:24
1159
+ def registered?(loader); end
1160
+
1161
+ # pkg:gem/zeitwerk#lib/zeitwerk/registry/loaders.rb:19
1162
+ def unregister(loader); end
1163
+ end
1164
+
1165
+ # pkg:gem/zeitwerk#lib/zeitwerk/error.rb:7
1166
+ class Zeitwerk::ReloadingDisabledError < ::Zeitwerk::Error
1167
+ # pkg:gem/zeitwerk#lib/zeitwerk/error.rb:9
1168
+ def initialize; end
1169
+ end
1170
+
1171
+ # pkg:gem/zeitwerk#lib/zeitwerk/error.rb:17
1172
+ class Zeitwerk::SetupRequired < ::Zeitwerk::Error
1173
+ # pkg:gem/zeitwerk#lib/zeitwerk/error.rb:19
1174
+ def initialize; end
1175
+ end
1176
+
1177
+ # pkg:gem/zeitwerk#lib/zeitwerk/version.rb:5
1178
+ Zeitwerk::VERSION = T.let(T.unsafe(nil), String)