Beispiel
Collapse directory namespaces with Zeitwerk without recursively flattening nested subdirectories
sha256:f5e879ad7fff251e4014b28be48663de7b4514a83f5c057a70ea7fb6c2917dd6
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Fall
- Ziel
- Collapse directory namespaces with Zeitwerk without recursively flattening nested subdirectories HOW
- Pakete
- zeitwerk 2.8.3
- Umgebung
- ruby
- Erstellt
- 2026-08-17T01:22:20Z
Häufige Annahme
loader.collapse strips all directory nesting within the target directory so nested files define top-level constants in the parent namespace
So hat der Autor des Samples festgehalten, was eine Entwicklerin oder ein Modell hier erwarten würde. Der Vertrag darunter ist das, was tatsächlich lief.
Contract
- assert loader.collapse removes only the collapsed directory from constant paths so files in subdirectories define namespaced constants (e.g. concerns/oauth/token.rb defines Oauth::Token) rather than flattening the entire subtree into the parent namespace (Token)
- assert the collapsed directory name itself is never registered as an autoload or defined as a constant in the parent module, leaving Object.autoload?(:Concerns) nil and Object.const_defined?(:Concerns) false
- assert an uncollapsed directory registers the directory name as an autoloaded module namespace so concerns/archivable.rb defines Concerns::Archivable
- assert collapsing a directory nested within a namespace (admin/concerns) keeps the outer namespace intact so admin/concerns/auditable.rb defines Admin::Auditable and subdirectories define Admin::Audit::Trail
- assert loader.collapse supports glob patterns to collapse matching directories across multiple branches in a single call
- assert all_expected_cpaths maps collapsed directory paths directly to their parent namespace and files inside them to their un-prefixed constant names without loading any file
- assert loader.ignore completely excludes matching files from autoloads and all_expected_cpaths whereas loader.collapse preserves autoloading while stripping the directory level
- assert zeitwerk 2.8.3 is pure Ruby with no C extensions and no runtime dependencies
Dateien
- Gemfile
- Gemfile.lock
- NOTES.md
- csx.json
- src/collapsing.rb
- src/trees/audit_cpaths/concerns/authenticatable.rb
- src/trees/audit_cpaths/concerns/helpers/formatting/text.rb
- src/trees/audit_cpaths/concerns/oauth/token.rb
- src/trees/audit_cpaths/user.rb
- src/trees/collapsed_absent/concerns/present.rb
- src/trees/collapsed_direct/concerns/authenticatable.rb
- src/trees/collapsed_direct/concerns/helpers/formatting/text.rb
- src/trees/collapsed_direct/concerns/oauth/token.rb
- src/trees/collapsed_direct/user.rb
- src/trees/glob_domains/controllers/concerns/responders.rb
- src/trees/glob_domains/models/concerns/trackable.rb
- src/trees/ignored_diff/concerns/active.rb
- src/trees/ignored_diff/ignored_dir/scratch.rb
- src/trees/nested_admin/admin/concerns/audit/trail.rb
- src/trees/nested_admin/admin/concerns/auditable.rb
- src/trees/nested_admin/admin/dashboard.rb
- src/trees/uncollapsed_ns/concerns/archivable.rb
- test/contract.rb
Verifiziertes Artefakt herunterladen (tar.gz) — genau die Bytes, gegen die der Contract lief
Ursprungs-Seeder
Verifizierungsbelege
- ruby 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · rubygems@1 · 2026-08-17 · ed25519:d91480838ac982c9