data_model 0.0.1 → 0.2.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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +6 -2
  3. data/.rubocop.yml +11 -2
  4. data/.ruby-version +2 -0
  5. data/Gemfile.lock +91 -54
  6. data/Guardfile +20 -0
  7. data/Rakefile +32 -0
  8. data/data_model.gemspec +52 -0
  9. data/lib/data_model/boolean.rb +7 -0
  10. data/lib/data_model/builtin/array.rb +73 -0
  11. data/lib/data_model/builtin/big_decimal.rb +64 -0
  12. data/lib/data_model/builtin/boolean.rb +37 -0
  13. data/lib/data_model/builtin/date.rb +60 -0
  14. data/lib/data_model/builtin/float.rb +64 -0
  15. data/lib/data_model/builtin/hash.rb +119 -0
  16. data/lib/data_model/builtin/integer.rb +64 -0
  17. data/lib/data_model/builtin/string.rb +88 -0
  18. data/lib/data_model/builtin/symbol.rb +64 -0
  19. data/lib/data_model/builtin/time.rb +60 -0
  20. data/lib/data_model/builtin.rb +23 -0
  21. data/lib/data_model/error.rb +107 -0
  22. data/lib/data_model/errors.rb +296 -0
  23. data/lib/data_model/fixtures/array.rb +61 -0
  24. data/lib/data_model/fixtures/big_decimal.rb +55 -0
  25. data/lib/data_model/fixtures/boolean.rb +35 -0
  26. data/lib/data_model/fixtures/date.rb +53 -0
  27. data/lib/data_model/fixtures/example.rb +29 -0
  28. data/lib/data_model/fixtures/float.rb +53 -0
  29. data/lib/data_model/fixtures/hash.rb +66 -0
  30. data/lib/data_model/fixtures/integer.rb +53 -0
  31. data/lib/data_model/fixtures/string.rb +110 -0
  32. data/lib/data_model/fixtures/symbol.rb +56 -0
  33. data/lib/data_model/fixtures/time.rb +53 -0
  34. data/lib/data_model/logging.rb +23 -0
  35. data/lib/data_model/model.rb +21 -44
  36. data/lib/data_model/scanner.rb +92 -56
  37. data/lib/data_model/testing/minitest.rb +79 -0
  38. data/lib/data_model/testing.rb +6 -0
  39. data/lib/data_model/type.rb +41 -39
  40. data/lib/data_model/type_registry.rb +68 -0
  41. data/lib/data_model/version.rb +3 -1
  42. data/lib/data_model.rb +32 -16
  43. data/sorbet/config +4 -0
  44. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  45. data/sorbet/rbi/gems/minitest@5.18.0.rbi +1491 -0
  46. data/sorbet/rbi/gems/zeitwerk.rbi +196 -0
  47. data/sorbet/rbi/gems/zeitwerk@2.6.7.rbi +966 -0
  48. data/sorbet/rbi/todo.rbi +5 -0
  49. data/sorbet/tapioca/config.yml +13 -0
  50. data/sorbet/tapioca/require.rb +4 -0
  51. metadata +139 -17
  52. data/config/sus.rb +0 -2
  53. data/fixtures/schema.rb +0 -14
  54. data/lib/data_model/registry.rb +0 -44
@@ -0,0 +1,966 @@
1
+ # typed: false
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
+ # source://zeitwerk//lib/zeitwerk/kernel.rb#3
8
+ module Kernel
9
+ private
10
+
11
+ # source://zeitwerk//lib/zeitwerk/kernel.rb#27
12
+ def require(path); end
13
+
14
+ class << self
15
+ # source://zeitwerk//lib/zeitwerk/kernel.rb#27
16
+ def require(path); end
17
+ end
18
+ end
19
+
20
+ # source://zeitwerk//lib/zeitwerk.rb#3
21
+ module Zeitwerk
22
+ class << self
23
+ # This is a dangerous method.
24
+ #
25
+ # source://zeitwerk//lib/zeitwerk.rb#20
26
+ def with_loader; end
27
+ end
28
+ end
29
+
30
+ # source://zeitwerk//lib/zeitwerk/error.rb#4
31
+ class Zeitwerk::Error < ::StandardError; end
32
+
33
+ # Centralizes the logic for the trace point used to detect the creation of
34
+ # explicit namespaces, needed to descend into matching subdirectories right
35
+ # after the constant has been defined.
36
+ #
37
+ # The implementation assumes an explicit namespace is managed by one loader.
38
+ # Loaders that reopen namespaces owned by other projects are responsible for
39
+ # loading their constant before setup. This is documented.
40
+ #
41
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#11
42
+ module Zeitwerk::ExplicitNamespace
43
+ extend ::Zeitwerk::RealModName
44
+
45
+ class << self
46
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#35
47
+ def __register(cpath, loader); end
48
+
49
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#53
50
+ def __registered?(cpath); end
51
+
52
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#45
53
+ def __unregister_loader(loader); end
54
+
55
+ private
56
+
57
+ # Maps constant paths that correspond to explicit namespaces according to
58
+ # the file system, to the loader responsible for them.
59
+ #
60
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#20
61
+ def cpaths; end
62
+
63
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#58
64
+ def disable_tracer_if_unneeded; end
65
+
66
+ # Returns the value of attribute mutex.
67
+ #
68
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#24
69
+ def mutex; end
70
+
71
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#35
72
+ def register(cpath, loader); end
73
+
74
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#53
75
+ def registered?(cpath); end
76
+
77
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#65
78
+ def tracepoint_class_callback(event); end
79
+
80
+ # Returns the value of attribute tracer.
81
+ #
82
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#28
83
+ def tracer; end
84
+
85
+ # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#45
86
+ def unregister_loader(loader); end
87
+ end
88
+ end
89
+
90
+ # source://zeitwerk//lib/zeitwerk/gem_inflector.rb#4
91
+ class Zeitwerk::GemInflector < ::Zeitwerk::Inflector
92
+ # @return [GemInflector] a new instance of GemInflector
93
+ #
94
+ # source://zeitwerk//lib/zeitwerk/gem_inflector.rb#6
95
+ def initialize(root_file); end
96
+
97
+ # source://zeitwerk//lib/zeitwerk/gem_inflector.rb#13
98
+ def camelize(basename, abspath); end
99
+ end
100
+
101
+ # @private
102
+ #
103
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#5
104
+ class Zeitwerk::GemLoader < ::Zeitwerk::Loader
105
+ # @return [GemLoader] a new instance of GemLoader
106
+ #
107
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#17
108
+ def initialize(root_file, warn_on_extra_files:); end
109
+
110
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#30
111
+ def setup; end
112
+
113
+ private
114
+
115
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#38
116
+ def warn_on_extra_files; end
117
+
118
+ class << self
119
+ # @private
120
+ #
121
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#12
122
+ def _new(root_file, warn_on_extra_files:); end
123
+
124
+ private
125
+
126
+ def new(*_arg0); end
127
+ end
128
+ end
129
+
130
+ # source://zeitwerk//lib/zeitwerk/inflector.rb#4
131
+ class Zeitwerk::Inflector
132
+ # Very basic snake case -> camel case conversion.
133
+ #
134
+ # inflector = Zeitwerk::Inflector.new
135
+ # inflector.camelize("post", ...) # => "Post"
136
+ # inflector.camelize("users_controller", ...) # => "UsersController"
137
+ # inflector.camelize("api", ...) # => "Api"
138
+ #
139
+ # Takes into account hard-coded mappings configured with `inflect`.
140
+ #
141
+ # source://zeitwerk//lib/zeitwerk/inflector.rb#15
142
+ def camelize(basename, _abspath); end
143
+
144
+ # Configures hard-coded inflections:
145
+ #
146
+ # inflector = Zeitwerk::Inflector.new
147
+ # inflector.inflect(
148
+ # "html_parser" => "HTMLParser",
149
+ # "mysql_adapter" => "MySQLAdapter"
150
+ # )
151
+ #
152
+ # inflector.camelize("html_parser", abspath) # => "HTMLParser"
153
+ # inflector.camelize("mysql_adapter", abspath) # => "MySQLAdapter"
154
+ # inflector.camelize("users_controller", abspath) # => "UsersController"
155
+ #
156
+ # source://zeitwerk//lib/zeitwerk/inflector.rb#32
157
+ def inflect(inflections); end
158
+
159
+ private
160
+
161
+ # Hard-coded basename to constant name user maps that override the default
162
+ # inflection logic.
163
+ #
164
+ # source://zeitwerk//lib/zeitwerk/inflector.rb#42
165
+ def overrides; end
166
+ end
167
+
168
+ # This is a private module.
169
+ #
170
+ # source://zeitwerk//lib/zeitwerk/internal.rb#4
171
+ module Zeitwerk::Internal
172
+ # source://zeitwerk//lib/zeitwerk/internal.rb#5
173
+ def internal(method_name); end
174
+ end
175
+
176
+ # source://zeitwerk//lib/zeitwerk/loader.rb#6
177
+ class Zeitwerk::Loader
178
+ include ::Zeitwerk::RealModName
179
+ include ::Zeitwerk::Loader::Callbacks
180
+ include ::Zeitwerk::Loader::Helpers
181
+ include ::Zeitwerk::Loader::Config
182
+ include ::Zeitwerk::Loader::EagerLoad
183
+ extend ::Zeitwerk::Internal
184
+
185
+ # @return [Loader] a new instance of Loader
186
+ #
187
+ # source://zeitwerk//lib/zeitwerk/loader.rb#98
188
+ def initialize; end
189
+
190
+ # source://zeitwerk//lib/zeitwerk/loader.rb#42
191
+ def __autoloaded_dirs; end
192
+
193
+ # source://zeitwerk//lib/zeitwerk/loader.rb#32
194
+ def __autoloads; end
195
+
196
+ # source://zeitwerk//lib/zeitwerk/loader.rb#76
197
+ def __namespace_dirs; end
198
+
199
+ # source://zeitwerk//lib/zeitwerk/loader.rb#260
200
+ def __shadowed_file?(file); end
201
+
202
+ # source://zeitwerk//lib/zeitwerk/loader.rb#87
203
+ def __shadowed_files; end
204
+
205
+ # source://zeitwerk//lib/zeitwerk/loader.rb#58
206
+ def __to_unload; end
207
+
208
+ # Unloads all loaded code, and calls setup again so that the loader is able
209
+ # to pick any changes in the file system.
210
+ #
211
+ # This method is not thread-safe, please see how this can be achieved by
212
+ # client code in the README of the project.
213
+ #
214
+ # @raise [Zeitwerk::Error]
215
+ #
216
+ # source://zeitwerk//lib/zeitwerk/loader.rb#221
217
+ def reload; end
218
+
219
+ # Sets autoloads in the root namespaces.
220
+ #
221
+ # source://zeitwerk//lib/zeitwerk/loader.rb#117
222
+ def setup; end
223
+
224
+ # Removes loaded constants and configured autoloads.
225
+ #
226
+ # The objects the constants stored are no longer reachable through them. In
227
+ # addition, since said objects are normally not referenced from anywhere
228
+ # else, they are eligible for garbage collection, which would effectively
229
+ # unload them.
230
+ #
231
+ # This method is public but undocumented. Main interface is `reload`, which
232
+ # means `unload` + `setup`. This one is available to be used together with
233
+ # `unregister`, which is undocumented too.
234
+ #
235
+ # source://zeitwerk//lib/zeitwerk/loader.rb#143
236
+ def unload; end
237
+
238
+ # Says if the given constant path would be unloaded on reload. This
239
+ # predicate returns `false` if reloading is disabled.
240
+ #
241
+ # @return [Boolean]
242
+ #
243
+ # source://zeitwerk//lib/zeitwerk/loader.rb#235
244
+ def unloadable_cpath?(cpath); end
245
+
246
+ # Returns an array with the constant paths that would be unloaded on reload.
247
+ # This predicate returns an empty array if reloading is disabled.
248
+ #
249
+ # source://zeitwerk//lib/zeitwerk/loader.rb#243
250
+ def unloadable_cpaths; end
251
+
252
+ # This is a dangerous method.
253
+ #
254
+ # source://zeitwerk//lib/zeitwerk/loader.rb#251
255
+ def unregister; end
256
+
257
+ private
258
+
259
+ # source://zeitwerk//lib/zeitwerk/loader.rb#393
260
+ def autoload_file(parent, cname, file); end
261
+
262
+ # @return [Boolean]
263
+ #
264
+ # source://zeitwerk//lib/zeitwerk/loader.rb#451
265
+ def autoload_path_set_by_me_for?(parent, cname); end
266
+
267
+ # source://zeitwerk//lib/zeitwerk/loader.rb#363
268
+ def autoload_subdir(parent, cname, subdir); end
269
+
270
+ # We keep track of autoloaded directories to remove them from the registry
271
+ # at the end of eager loading.
272
+ #
273
+ # Files are removed as they are autoloaded, but directories need to wait due
274
+ # to concurrency (see why in Zeitwerk::Loader::Callbacks#on_dir_autoloaded).
275
+ #
276
+ # source://zeitwerk//lib/zeitwerk/loader.rb#42
277
+ def autoloaded_dirs; end
278
+
279
+ # Maps absolute paths for which an autoload has been set ---and not
280
+ # executed--- to their corresponding parent class or module and constant
281
+ # name.
282
+ #
283
+ # "/Users/fxn/blog/app/models/user.rb" => [Object, :User],
284
+ # "/Users/fxn/blog/app/models/hotel/pricing.rb" => [Hotel, :Pricing]
285
+ # ...
286
+ #
287
+ # source://zeitwerk//lib/zeitwerk/loader.rb#32
288
+ def autoloads; end
289
+
290
+ # Returns the value of attribute mutex.
291
+ #
292
+ # source://zeitwerk//lib/zeitwerk/loader.rb#91
293
+ def mutex; end
294
+
295
+ # Returns the value of attribute mutex2.
296
+ #
297
+ # source://zeitwerk//lib/zeitwerk/loader.rb#95
298
+ def mutex2; end
299
+
300
+ # Maps namespace constant paths to their respective directories.
301
+ #
302
+ # For example, given this mapping:
303
+ #
304
+ # "Admin" => [
305
+ # "/Users/fxn/blog/app/controllers/admin",
306
+ # "/Users/fxn/blog/app/models/admin",
307
+ # ...
308
+ # ]
309
+ #
310
+ # when `Admin` gets defined we know that it plays the role of a namespace
311
+ # and that its children are spread over those directories. We'll visit them
312
+ # to set up the corresponding autoloads.
313
+ #
314
+ # source://zeitwerk//lib/zeitwerk/loader.rb#76
315
+ def namespace_dirs; end
316
+
317
+ # `dir` is the directory that would have autovivified a namespace. `file` is
318
+ # the file where we've found the namespace is explicitly defined.
319
+ #
320
+ # source://zeitwerk//lib/zeitwerk/loader.rb#419
321
+ def promote_namespace_from_implicit_to_explicit(dir:, file:, parent:, cname:); end
322
+
323
+ # source://zeitwerk//lib/zeitwerk/loader.rb#465
324
+ def raise_if_conflicting_directory(dir); end
325
+
326
+ # source://zeitwerk//lib/zeitwerk/loader.rb#460
327
+ def register_explicit_namespace(cpath); end
328
+
329
+ # source://zeitwerk//lib/zeitwerk/loader.rb#490
330
+ def run_on_unload_callbacks(cpath, value, abspath); end
331
+
332
+ # source://zeitwerk//lib/zeitwerk/loader.rb#430
333
+ def set_autoload(parent, cname, abspath); end
334
+
335
+ # source://zeitwerk//lib/zeitwerk/loader.rb#328
336
+ def set_autoloads_in_dir(dir, parent); end
337
+
338
+ # source://zeitwerk//lib/zeitwerk/loader.rb#260
339
+ def shadowed_file?(file); end
340
+
341
+ # A shadowed file is a file managed by this loader that is ignored when
342
+ # setting autoloads because its matching constant is already taken.
343
+ #
344
+ # This private set is populated as we descend. For example, if the loader
345
+ # has only scanned the top-level, `shadowed_files` does not have shadowed
346
+ # files that may exist deep in the project tree yet.
347
+ #
348
+ # source://zeitwerk//lib/zeitwerk/loader.rb#87
349
+ def shadowed_files; end
350
+
351
+ # Stores metadata needed for unloading. Its entries look like this:
352
+ #
353
+ # "Admin::Role" => [".../admin/role.rb", [Admin, :Role]]
354
+ #
355
+ # The cpath as key helps implementing unloadable_cpath? The file name is
356
+ # stored in order to be able to delete it from $LOADED_FEATURES, and the
357
+ # pair [Module, Symbol] is used to remove_const the constant from the class
358
+ # or module object.
359
+ #
360
+ # If reloading is enabled, this hash is filled as constants are autoloaded
361
+ # or eager loaded. Otherwise, the collection remains empty.
362
+ #
363
+ # source://zeitwerk//lib/zeitwerk/loader.rb#58
364
+ def to_unload; end
365
+
366
+ # source://zeitwerk//lib/zeitwerk/loader.rb#497
367
+ def unload_autoload(parent, cname); end
368
+
369
+ # source://zeitwerk//lib/zeitwerk/loader.rb#503
370
+ def unload_cref(parent, cname); end
371
+
372
+ class << self
373
+ # Returns an array with the absolute paths of the root directories of all
374
+ # registered loaders. This is a read-only collection.
375
+ #
376
+ # source://zeitwerk//lib/zeitwerk/loader.rb#322
377
+ def all_dirs; end
378
+
379
+ # Returns the value of attribute default_logger.
380
+ #
381
+ # source://zeitwerk//lib/zeitwerk/loader.rb#268
382
+ def default_logger; end
383
+
384
+ # Sets the attribute default_logger
385
+ #
386
+ # @param value the value to set the attribute default_logger to.
387
+ #
388
+ # source://zeitwerk//lib/zeitwerk/loader.rb#268
389
+ def default_logger=(_arg0); end
390
+
391
+ # Broadcasts `eager_load` to all loaders. Those that have not been setup
392
+ # are skipped.
393
+ #
394
+ # source://zeitwerk//lib/zeitwerk/loader.rb#294
395
+ def eager_load_all; end
396
+
397
+ # Broadcasts `eager_load_namespace` to all loaders. Those that have not
398
+ # been setup are skipped.
399
+ #
400
+ # source://zeitwerk//lib/zeitwerk/loader.rb#308
401
+ def eager_load_namespace(mod); end
402
+
403
+ # This is a shortcut for
404
+ #
405
+ # require "zeitwerk"
406
+ # loader = Zeitwerk::Loader.new
407
+ # loader.tag = File.basename(__FILE__, ".rb")
408
+ # loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
409
+ # loader.push_dir(__dir__)
410
+ #
411
+ # except that this method returns the same object in subsequent calls from
412
+ # the same file, in the unlikely case the gem wants to be able to reload.
413
+ #
414
+ # This method returns a subclass of Zeitwerk::Loader, but the exact type
415
+ # is private, client code can only rely on the interface.
416
+ #
417
+ # source://zeitwerk//lib/zeitwerk/loader.rb#285
418
+ def for_gem(warn_on_extra_files: T.unsafe(nil)); end
419
+ end
420
+ end
421
+
422
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#3
423
+ module Zeitwerk::Loader::Callbacks
424
+ include ::Zeitwerk::RealModName
425
+
426
+ # Invoked from our decorated Kernel#require when a managed directory is
427
+ # autoloaded.
428
+ #
429
+ # @private
430
+ #
431
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#34
432
+ def on_dir_autoloaded(dir); end
433
+
434
+ # Invoked from our decorated Kernel#require when a managed file is autoloaded.
435
+ #
436
+ # @private
437
+ #
438
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#10
439
+ def on_file_autoloaded(file); end
440
+
441
+ # Invoked when a class or module is created or reopened, either from the
442
+ # tracer or from module autovivification. If the namespace has matching
443
+ # subdirectories, we descend into them now.
444
+ #
445
+ # @private
446
+ #
447
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#73
448
+ def on_namespace_loaded(namespace); end
449
+
450
+ private
451
+
452
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#84
453
+ def run_on_load_callbacks(cpath, value, abspath); end
454
+ end
455
+
456
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#6
457
+ module Zeitwerk::Loader::Config
458
+ include ::Zeitwerk::RealModName
459
+ extend ::Zeitwerk::Internal
460
+
461
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#86
462
+ def initialize; end
463
+
464
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#297
465
+ def __ignores?(abspath); end
466
+
467
+ def __roots; end
468
+
469
+ # Configure directories or glob patterns to be collapsed.
470
+ #
471
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#217
472
+ def collapse(*glob_patterns); end
473
+
474
+ # If `namespaces` is falsey (default), returns an array with the absolute
475
+ # paths of the root directories as strings. If truthy, returns a hash table
476
+ # instead. Keys are the absolute paths of the root directories as strings,
477
+ # values are their corresponding namespaces, class or module objects.
478
+ #
479
+ # If `ignored` is falsey (default), ignored root directories are filtered out.
480
+ #
481
+ # These are read-only collections, please add to them with `push_dir`.
482
+ #
483
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#157
484
+ def dirs(namespaces: T.unsafe(nil), ignored: T.unsafe(nil)); end
485
+
486
+ # Let eager load ignore the given files or directories. The constants defined
487
+ # in those files are still autoloadable.
488
+ #
489
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#199
490
+ def do_not_eager_load(*paths); end
491
+
492
+ # You need to call this method before setup in order to be able to reload.
493
+ # There is no way to undo this, either you want to reload or you don't.
494
+ #
495
+ # @raise [Zeitwerk::Error]
496
+ #
497
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#178
498
+ def enable_reloading; end
499
+
500
+ # Configure files, directories, or glob patterns to be totally ignored.
501
+ #
502
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#206
503
+ def ignore(*glob_patterns); end
504
+
505
+ # Returns the value of attribute inflector.
506
+ #
507
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#11
508
+ def inflector; end
509
+
510
+ # Sets the attribute inflector
511
+ #
512
+ # @param value the value to set the attribute inflector to.
513
+ #
514
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#11
515
+ def inflector=(_arg0); end
516
+
517
+ # Logs to `$stdout`, handy shortcut for debugging.
518
+ #
519
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#289
520
+ def log!; end
521
+
522
+ # Returns the value of attribute logger.
523
+ #
524
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#14
525
+ def logger; end
526
+
527
+ # Sets the attribute logger
528
+ #
529
+ # @param value the value to set the attribute logger to.
530
+ #
531
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#14
532
+ def logger=(_arg0); end
533
+
534
+ # Configure a block to be invoked once a certain constant path is loaded.
535
+ # Supports multiple callbacks, and if there are many, they are executed in
536
+ # the order in which they were defined.
537
+ #
538
+ # loader.on_load("SomeApiClient") do |klass, _abspath|
539
+ # klass.endpoint = "https://api.dev"
540
+ # end
541
+ #
542
+ # Can also be configured for any constant loaded:
543
+ #
544
+ # loader.on_load do |cpath, value, abspath|
545
+ # # ...
546
+ # end
547
+ #
548
+ # @raise [TypeError]
549
+ #
550
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#253
551
+ def on_load(cpath = T.unsafe(nil), &block); end
552
+
553
+ # Configure a block to be called after setup and on each reload.
554
+ # If setup was already done, the block runs immediately.
555
+ #
556
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#229
557
+ def on_setup(&block); end
558
+
559
+ # Configure a block to be invoked right before a certain constant is removed.
560
+ # Supports multiple callbacks, and if there are many, they are executed in the
561
+ # order in which they were defined.
562
+ #
563
+ # loader.on_unload("Country") do |klass, _abspath|
564
+ # klass.clear_cache
565
+ # end
566
+ #
567
+ # Can also be configured for any removed constant:
568
+ #
569
+ # loader.on_unload do |cpath, value, abspath|
570
+ # # ...
571
+ # end
572
+ #
573
+ # @raise [TypeError]
574
+ #
575
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#278
576
+ def on_unload(cpath = T.unsafe(nil), &block); end
577
+
578
+ # Pushes `path` to the list of root directories.
579
+ #
580
+ # Raises `Zeitwerk::Error` if `path` does not exist, or if another loader in
581
+ # the same process already manages that directory or one of its ascendants or
582
+ # descendants.
583
+ #
584
+ # @raise [Zeitwerk::Error]
585
+ #
586
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#111
587
+ def push_dir(path, namespace: T.unsafe(nil)); end
588
+
589
+ # @return [Boolean]
590
+ #
591
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#191
592
+ def reloading_enabled?; end
593
+
594
+ # Returns the loader's tag.
595
+ #
596
+ # Implemented as a method instead of via attr_reader for symmetry with the
597
+ # writer below.
598
+ #
599
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#136
600
+ def tag; end
601
+
602
+ # Sets a tag for the loader, useful for logging.
603
+ #
604
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#143
605
+ def tag=(tag); end
606
+
607
+ private
608
+
609
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#315
610
+ def actual_roots; end
611
+
612
+ # @return [Boolean]
613
+ #
614
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#340
615
+ def collapse?(dir); end
616
+
617
+ # The actual collection of absolute directory names at the time the collapse
618
+ # glob patterns were expanded. Computed on setup, and recomputed on reload.
619
+ #
620
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#57
621
+ def collapse_dirs; end
622
+
623
+ # Absolute paths of directories or glob patterns to be collapsed.
624
+ #
625
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#50
626
+ def collapse_glob_patterns; end
627
+
628
+ # Absolute paths of files or directories not to be eager loaded.
629
+ #
630
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#63
631
+ def eager_load_exclusions; end
632
+
633
+ # @return [Boolean]
634
+ #
635
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#327
636
+ def excluded_from_eager_load?(abspath); end
637
+
638
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#350
639
+ def expand_glob_patterns(glob_patterns); end
640
+
641
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#345
642
+ def expand_paths(paths); end
643
+
644
+ # Absolute paths of files, directories, or glob patterns to be totally
645
+ # ignored.
646
+ #
647
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#36
648
+ def ignored_glob_patterns; end
649
+
650
+ # @return [Boolean]
651
+ #
652
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#310
653
+ def ignored_path?(abspath); end
654
+
655
+ # The actual collection of absolute file and directory names at the time the
656
+ # ignored glob patterns were expanded. Computed on setup, and recomputed on
657
+ # reload.
658
+ #
659
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#44
660
+ def ignored_paths; end
661
+
662
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#297
663
+ def ignores?(abspath); end
664
+
665
+ # User-oriented callbacks to be fired when a constant is loaded.
666
+ #
667
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#76
668
+ def on_load_callbacks; end
669
+
670
+ # User-oriented callbacks to be fired on setup and on reload.
671
+ #
672
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#69
673
+ def on_setup_callbacks; end
674
+
675
+ # User-oriented callbacks to be fired before constants are removed.
676
+ #
677
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#83
678
+ def on_unload_callbacks; end
679
+
680
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#362
681
+ def recompute_collapse_dirs; end
682
+
683
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#357
684
+ def recompute_ignored_paths; end
685
+
686
+ # @return [Boolean]
687
+ #
688
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#322
689
+ def root_dir?(dir); end
690
+
691
+ # Absolute paths of the root directories, mapped to their respective root namespaces:
692
+ #
693
+ # "/Users/fxn/blog/app/channels" => Object,
694
+ # "/Users/fxn/blog/app/adapters" => ActiveJob::QueueAdapters,
695
+ # ...
696
+ #
697
+ # Stored in a hash to preserve order, easily handle duplicates, and have a
698
+ # fast lookup by directory.
699
+ #
700
+ # This is a private collection maintained by the loader. The public
701
+ # interface for it is `push_dir` and `dirs`.
702
+ #
703
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#29
704
+ def roots; end
705
+ end
706
+
707
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#1
708
+ module Zeitwerk::Loader::EagerLoad
709
+ # Eager loads all files in the root directories, recursively. Files do not
710
+ # need to be in `$LOAD_PATH`, absolute file names are used. Ignored and
711
+ # shadowed files are not eager loaded. You can opt-out specifically in
712
+ # specific files and directories with `do_not_eager_load`, and that can be
713
+ # overridden passing `force: true`.
714
+ #
715
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#9
716
+ def eager_load(force: T.unsafe(nil)); end
717
+
718
+ # @raise [Zeitwerk::SetupRequired]
719
+ #
720
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#32
721
+ def eager_load_dir(path); end
722
+
723
+ # @raise [Zeitwerk::SetupRequired]
724
+ #
725
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#72
726
+ def eager_load_namespace(mod); end
727
+
728
+ # Loads the given Ruby file.
729
+ #
730
+ # Raises if the argument is ignored, shadowed, or not managed by the receiver.
731
+ #
732
+ # The method is implemented as `constantize` for files, in a sense, to be able
733
+ # to descend orderly and make sure the file is loadable.
734
+ #
735
+ # @raise [Zeitwerk::Error]
736
+ #
737
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#114
738
+ def load_file(path); end
739
+
740
+ private
741
+
742
+ # The caller is responsible for making sure `namespace` is the namespace that
743
+ # corresponds to `dir`.
744
+ #
745
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#154
746
+ def actual_eager_load_dir(dir, namespace, force: T.unsafe(nil)); end
747
+
748
+ # In order to invoke this method, the caller has to ensure `child` is a
749
+ # strict namespace descendant of `root_namespace`.
750
+ #
751
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#189
752
+ def eager_load_child_namespace(child, child_name, root_dir, root_namespace); end
753
+ end
754
+
755
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#3
756
+ module Zeitwerk::Loader::Helpers
757
+ private
758
+
759
+ # @return [Boolean]
760
+ #
761
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#128
762
+ def cdef?(parent, cname); end
763
+
764
+ # @raise [NameError]
765
+ #
766
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#134
767
+ def cget(parent, cname); end
768
+
769
+ # Symbol#name was introduced in Ruby 3.0. It returns always the same
770
+ # frozen object, so we may save a few string allocations.
771
+ #
772
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#118
773
+ def cpath(parent, cname); end
774
+
775
+ # @raise [NameError]
776
+ #
777
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#140
778
+ def crem(parent, cname); end
779
+
780
+ # @return [Boolean]
781
+ #
782
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#67
783
+ def dir?(path); end
784
+
785
+ # @return [Boolean]
786
+ #
787
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#45
788
+ def has_at_least_one_ruby_file?(dir); end
789
+
790
+ # @return [Boolean]
791
+ #
792
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#72
793
+ def hidden?(basename); end
794
+
795
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#7
796
+ def log(message); end
797
+
798
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#15
799
+ def ls(dir); end
800
+
801
+ # @return [Boolean]
802
+ #
803
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#62
804
+ def ruby?(path); end
805
+
806
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#109
807
+ def strict_autoload_path(parent, cname); end
808
+
809
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#77
810
+ def walk_up(abspath); end
811
+ end
812
+
813
+ # source://zeitwerk//lib/zeitwerk/loader.rb#20
814
+ Zeitwerk::Loader::MUTEX = T.let(T.unsafe(nil), Thread::Mutex)
815
+
816
+ # source://zeitwerk//lib/zeitwerk/error.rb#13
817
+ class Zeitwerk::NameError < ::NameError; end
818
+
819
+ # source://zeitwerk//lib/zeitwerk/real_mod_name.rb#3
820
+ module Zeitwerk::RealModName
821
+ # source://zeitwerk//lib/zeitwerk/real_mod_name.rb#14
822
+ def real_mod_name(mod); end
823
+ end
824
+
825
+ # source://zeitwerk//lib/zeitwerk/real_mod_name.rb#4
826
+ Zeitwerk::RealModName::UNBOUND_METHOD_MODULE_NAME = T.let(T.unsafe(nil), UnboundMethod)
827
+
828
+ # source://zeitwerk//lib/zeitwerk/registry.rb#4
829
+ module Zeitwerk::Registry
830
+ class << self
831
+ # Maps absolute paths to the loaders responsible for them.
832
+ #
833
+ # This information is used by our decorated `Kernel#require` to be able to
834
+ # invoke callbacks and autovivify modules.
835
+ #
836
+ # @private
837
+ #
838
+ # source://zeitwerk//lib/zeitwerk/registry.rb#26
839
+ def autoloads; end
840
+
841
+ # Registers gem loaders to let `for_gem` be idempotent in case of reload.
842
+ #
843
+ # @private
844
+ #
845
+ # source://zeitwerk//lib/zeitwerk/registry.rb#17
846
+ def gem_loaders_by_root_file; end
847
+
848
+ # @private
849
+ # @return [Boolean]
850
+ #
851
+ # source://zeitwerk//lib/zeitwerk/registry.rb#113
852
+ def inception?(cpath); end
853
+
854
+ # This hash table addresses an edge case in which an autoload is ignored.
855
+ #
856
+ # For example, let's suppose we want to autoload in a gem like this:
857
+ #
858
+ # # lib/my_gem.rb
859
+ # loader = Zeitwerk::Loader.new
860
+ # loader.push_dir(__dir__)
861
+ # loader.setup
862
+ #
863
+ # module MyGem
864
+ # end
865
+ #
866
+ # if you require "my_gem", as Bundler would do, this happens while setting
867
+ # up autoloads:
868
+ #
869
+ # 1. Object.autoload?(:MyGem) returns `nil` because the autoload for
870
+ # the constant is issued by Zeitwerk while the same file is being
871
+ # required.
872
+ # 2. The constant `MyGem` is undefined while setup runs.
873
+ #
874
+ # Therefore, a directory `lib/my_gem` would autovivify a module according to
875
+ # the existing information. But that would be wrong.
876
+ #
877
+ # To overcome this fundamental limitation, we keep track of the constant
878
+ # paths that are in this situation ---in the example above, "MyGem"--- and
879
+ # take this collection into account for the autovivification logic.
880
+ #
881
+ # Note that you cannot generally address this by moving the setup code
882
+ # below the constant definition, because we want libraries to be able to
883
+ # use managed constants in the module body:
884
+ #
885
+ # module MyGem
886
+ # include MyConcern
887
+ # end
888
+ #
889
+ # @private
890
+ #
891
+ # source://zeitwerk//lib/zeitwerk/registry.rb#65
892
+ def inceptions; end
893
+
894
+ # @private
895
+ #
896
+ # source://zeitwerk//lib/zeitwerk/registry.rb#121
897
+ def loader_for(path); end
898
+
899
+ # This method returns always a loader, the same instance for the same root
900
+ # file. That is how Zeitwerk::Loader.for_gem is idempotent.
901
+ #
902
+ # @private
903
+ #
904
+ # source://zeitwerk//lib/zeitwerk/registry.rb#89
905
+ def loader_for_gem(root_file, warn_on_extra_files:); end
906
+
907
+ # Keeps track of all loaders. Useful to broadcast messages and to prevent
908
+ # them from being garbage collected.
909
+ #
910
+ # @private
911
+ #
912
+ # source://zeitwerk//lib/zeitwerk/registry.rb#11
913
+ def loaders; end
914
+
915
+ # @private
916
+ #
917
+ # source://zeitwerk//lib/zeitwerk/registry.rb#127
918
+ def on_unload(loader); end
919
+
920
+ # @private
921
+ #
922
+ # source://zeitwerk//lib/zeitwerk/registry.rb#95
923
+ def register_autoload(loader, abspath); end
924
+
925
+ # @private
926
+ #
927
+ # source://zeitwerk//lib/zeitwerk/registry.rb#107
928
+ def register_inception(cpath, abspath, loader); end
929
+
930
+ # Registers a loader.
931
+ #
932
+ # @private
933
+ #
934
+ # source://zeitwerk//lib/zeitwerk/registry.rb#71
935
+ def register_loader(loader); end
936
+
937
+ # @private
938
+ #
939
+ # source://zeitwerk//lib/zeitwerk/registry.rb#101
940
+ def unregister_autoload(abspath); end
941
+
942
+ # @private
943
+ #
944
+ # source://zeitwerk//lib/zeitwerk/registry.rb#77
945
+ def unregister_loader(loader); end
946
+ end
947
+ end
948
+
949
+ # source://zeitwerk//lib/zeitwerk/error.rb#7
950
+ class Zeitwerk::ReloadingDisabledError < ::Zeitwerk::Error
951
+ # @return [ReloadingDisabledError] a new instance of ReloadingDisabledError
952
+ #
953
+ # source://zeitwerk//lib/zeitwerk/error.rb#8
954
+ def initialize; end
955
+ end
956
+
957
+ # source://zeitwerk//lib/zeitwerk/error.rb#16
958
+ class Zeitwerk::SetupRequired < ::Zeitwerk::Error
959
+ # @return [SetupRequired] a new instance of SetupRequired
960
+ #
961
+ # source://zeitwerk//lib/zeitwerk/error.rb#17
962
+ def initialize; end
963
+ end
964
+
965
+ # source://zeitwerk//lib/zeitwerk/version.rb#4
966
+ Zeitwerk::VERSION = T.let(T.unsafe(nil), String)