74
/ 100
Solid engineering. The biggest lever is issue and PR templates.
FriendlyId is the “Swiss Army bulldozer” of slugging and permalink plugins for ActiveRecord. It allows you to create pretty URL’s and work with human-friendly strings as if they were numeric ids for ActiveRecord models.
Top fixes
Highest-impact changes first, ranked by point weight
- 1Tests18pt
Wire your tests to a documented command (e.g. a test script in your build config) so the suite is reproducible.
- 2CI/CD14pt
Add a lint step to catch style issues automatically.
- 3CI/CD14pt
Add `tsc --noEmit`, `mypy`, or `cargo check` to catch type errors before they merge.
- 4Install and run instructions9pt
Add a .env.example listing all required environment variables so contributors know what to set up.
Working through the fixes? Let every push regrade itself.
The free GitHub App rescans this repo on every push and posts the grade as a commit check, so the score climbs without coming back to rescan by hand.
Scorecard
Every check, grouped by category and sorted worst-first
Documentation
89
CONTRIBUTING guide is very brief (−12 pts for depth). 150+ words earns +6 pts; 400+ earns +12 pts.
→ Add setup instructions, code style notes, and how to run tests.
README documents how to install the project.
README is present.
Licensed under MIT.
Engineering
55
No RuboCop config found.
→ Add a .rubocop.yml and run `rubocop` in CI to enforce consistent Ruby style.
No issue or PR templates found (−100 pts).
→ Add .github/ISSUE_TEMPLATE/ with bug_report.md and feature_request.md to guide contributors. It dramatically improves issue quality.
No dependency lockfile found (−70 pts).
→ Commit Gemfile.lock so Bundler installs are repeatable.
Test files detected (test).
CI is configured (.github/workflows/test.yml).
Project health
100
Dependency manifest found (Gemfile).
Repository has a description.
Actively maintained (pushed within the last month).
.gitignore present.
Repository health signals
Activity, community, and responsiveness at scan time
Activity
- 1 / 1Commits (30d / 90d)
- 592Forks
- 1Releaseslatest 3mo ago
Community
- 57% - FairCommunity health
- 1 bus factorlowauthor own >50% of commits
- 6,227Watchers
Responsiveness
- 5hMedian issue response
- 24hMedian PR merge time
- 34Open issues
Repository files17 root entries
- .githubGood: CI is configured (.github/workflows/test.yml).Good: Dependabot configured for github-actions.
- gemfiles
- lib
- testGood: Test files detected (test).
- .gemtest
- .gitignoreGood: .gitignore present.
- .yardopts
- bench.rb
- Changelog.md
- CONTRIBUTING.mdIssue: CONTRIBUTING guide is very brief (−12 pts for depth). 150+ words earns +6 pts; 400+ earns +12 pts.Fix: Add setup instructions, code style notes, and how to run tests.Issue: Contributing guide lacks a setup section (−12 pts).Fix: Show new contributors how to get a local dev environment running.Issue: Contributing guide lacks a code style section (−8 pts).Fix: Describe your linting/formatting rules and how to run them.Issue: Contributing guide lacks a testing section (−8 pts).Fix: Show contributors how to run the test suite (e.g. npm test, pytest, cargo test).Issue: Contributing guide lacks a PR workflow section (−8 pts).Fix: Explain how to fork, branch, and open a pull request so contributors know what to expect.Issue: Contributing guide has no code examples (−5 pts).Fix: Add code blocks showing example commands for setup, running tests, and submitting a PR.
- friendly_id.gemspec
- GemfileGood: Dependency manifest found (Gemfile).
- guide.rb
- MIT-LICENSE
- Rakefile
- README.mdGood: README is present.Good: README is well structured with multiple sections.Good: README includes screenshots or visuals. Great for first impressions.Good: README has code examples.Good: README links to a live demo or deployed app.Good: README includes status badges.Good: README documents how to install the project.Good: README documents how to run the project.
- UPGRADING.md
Add this badge to your README
It updates automatically each time the repo is re-graded.
[](https://www.repo-grade.com/report/norman/friendly_id)