サンプル
Collapse directory namespaces with Zeitwerk without recursively flattening nested subdirectories
sha256:f5e879ad7fff251e4014b28be48663de7b4514a83f5c057a70ea7fb6c2917dd6
PUBLISHED
L3_CONTRACT_PASS
MIT-0
ケース
- ゴール
- Collapse directory namespaces with Zeitwerk without recursively flattening nested subdirectories HOW
- パッケージ
- zeitwerk 2.8.3
- 環境
- ruby
- 作成日
- 2026-08-17T01:22:20Z
よくある思い込み
loader.collapse strips all directory nesting within the target directory so nested files define top-level constants in the parent namespace
このサンプルの作者が、ここで開発者やモデルが期待するであろうこととして記録したもの。下の契約が実際に実行されたものだ。
コントラクト
- 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
ファイル
- 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
検証済みアーティファクトをダウンロード (tar.gz) — 契約が実行された正確なバイト列
オリジンシーダー
検証レシート
- ruby 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · rubygems@1 · 2026-08-17 · ed25519:d91480838ac982c9