Dirfy
Instantly scaffold directory & file structures from any ASCII/Unicode "tree" diagram π
π Table of Contents
- π Problem Statement
- β¨ Features
- π Installation
- π‘ Usage
- π οΈ Examples
- π€ Contributing
- π Release Process
- π License
π Problem Statement
Modern AI code generators (ChatGPT, Copilot, etc.) excel at producing code snippetsβbut often describe project layouts as ASCII or Unicode βtreeβ diagrams. Manually translating those diagrams into a real folder/file structure is:
- Time-consuming & error-prone when projects are large or deeply nested
-
Tedious to type out dozens or hundreds of
mkdir -p/touchcommands - Prone to typos and forgotten directories
Dirfy automates the entire process: feed it any tree diagram (text or file), and it creates the exact structureβno matter how bigβin seconds.
β¨ Features
- Parse ASCII & Unicode tree diagrams
-
Dry-run mode (
-d,--dry-run) to preview changes without writing -
Verbose logging (
-v,--verbose) for full action reports -
Custom indent support (
-i N,--indent=N) for non-standard tree outputs -
Path prefixing (
-p DIR/,--prefix=DIR/) to scaffold under any base folder - Live progress bar and clear success/failure summary
- Zero external dependencies (pure Ruby β₯ 2.7)
π Installation
# via RubyGems
gem install dirfy
# or from source
git clone https://github.com/ahmedmelhady7/dirfy.git
cd dirfy
bundle install
rake installπ‘ Usage
From a file
dirfy path/to/tree.txtVia pipe
cat tree.txt | dirfyCommon Options
| Flag | Description |
|---|---|
-d, --dry-run
|
Preview actions without creating files/directories |
-v, --verbose
|
Show each create/skip/fail action |
-i N, --indent=N
|
Set spaces per tree level (default: 4) |
-p DIR/, --prefix=
|
Prepend DIR/ to every generated path |
-h, --help
|
Display help and exit |
π οΈ Examples
Given a file myapp_tree.txt:
my_app/
βββ lib/
β βββ my_app.rb
βββ spec/
β βββ my_app_spec.rb
βββ README.md
Run:
dirfy -d -v myapp_tree.txtOutput (dry-run):
π Detected 4 items to create.
DRY-RUN Dir: my_app/
DRY-RUN Dir: my_app/lib/
DRY-RUN File: my_app/lib/my_app.rb
DRY-RUN Dir: my_app/spec/
DRY-RUN File: my_app/spec/my_app_spec.rb
DRY-RUN File: my_app/README.md
Remove -d to actually scaffold.
π€ Contributing
We β€οΈ pull-requests, issues, code-reviews, and β most importantly β your ideas to make dirfy even better.
-
Read our CONTRIBUTING.md for setup instructions, code style, and the PR process.
-
Fork the repo, branch off
main, and open a PR. -
Run tests locally:
bundle install bundle exec rake -
Ensure your code follows our style (via
rake lint) and has adequate test coverage. -
Celebrate π β once your PR is merged, add yourself to
AUTHORS.md!
Happy scaffolding! π
π Release Process
This project uses a semi-automated release process that balances automation with security. GitHub Actions handles building and testing, while gem publishing is done manually to support 2FA authentication.
Prerequisites
- Push access to the repository
- RubyGems account with push access to the
dirfygem - 2FA enabled on RubyGems account (recommended for security)
Semi-Automated Release Process
What's automated:
- β Gem building when you push tags
- β Running tests before release
- β GitHub release creation (optional)
What requires manual action:
- π Gem publishing to RubyGems (due to 2FA requirements)
Release Steps
-
Update version and run tests
# Edit lib/dirfy/version.rb to bump version vim lib/dirfy/version.rb bundle install # updates Gemfile.lock bundle exec rake # run tests
-
Commit and tag
git add lib/dirfy/version.rb Gemfile.lock git commit -m "chore: bump version to vX.Y.Z" git tag vX.Y.Z git push origin main --follow-tags -
Manual gem publishing (with 2FA)
rake build gem push pkg/dirfy-X.Y.Z.gem # Complete 2FA authentication in browser -
Optional: Create GitHub release
gh release create vX.Y.Z pkg/dirfy-X.Y.Z.gem \ --title "vX.Y.Z" \ --notes "Release notes here"
Using the Release Helper Script
For even easier releases, use the provided script:
./scripts/release.sh X.Y.ZThis script will:
- Update the version in
lib/dirfy/version.rb - Run tests to ensure everything works
- Build the gem locally
- Commit changes and create/push the tag
- Prompt you to manually publish with
gem push(for 2FA)
Why Semi-Automated?
- Security: Maintains 2FA protection on your RubyGems account
- Reliability: Manual gem push ensures you can handle 2FA interactively
- Automation: CI still handles building, testing, and GitHub releases
- Simplicity: No need to manage CI-specific RubyGems accounts or tokens
Troubleshooting
-
2FA Authentication: Follow the WebAuthn flow in your browser or use
--otpflag - Build failures: CI will automatically build when you push tags - check Actions tab for issues
- Permission denied: Ensure you have push access to both the repository and RubyGems gem
π License
MIT Β© Ahmed Elhady
Built with β€οΈ to make AI-generated project scaffolding a breeze.