Real World Rails
Real World Rails applications and their open source codebases for developers to learn from
This project brings 100+ (and growing) active, open source Rails apps and engines together in one repository, making it easier for developers to download the collected codebases and learn from Rails apps written by experienced developers. Reading open source code can be an invaluable learning aid. You’ll find the source code in the apps/ and engines/ subdirectories.
Real World Rails was begun to help teach newer developers and to research and write about Rails development practices:
- Find example usage of a method you’re unsure of
- Learn how other developers use a gem you’d like to use
- Discover how to write tests
- See how Rails engines are built
- …and much, much more.
How to install on your computer
Ensure you have git-lfs installed: https://git-lfs.com
# Clone this git repo: git clone git@github.com:eliotsykes/real-world-rails.git cd real-world-rails/ # The Rails apps are linked to as git submodules. GIT_LFS_SKIP_SMUDGE=1 git submodule update --init --single-branch --jobs 4 # To run the `bin/rwr` inspectors, install gems: bundle install echo "All done! Why not run some inspections? Run bin/rwr"
How to update your local copy of real-world-rails
Pull the latest commits from this repo and update submodules:
git pull GIT_LFS_SKIP_SMUDGE=1 git submodule update
Other Real World Codebase Collections
- Real World Sinatra https://github.com/jeromedalbert/real-world-sinatra
- Real World Ember https://github.com/eliotsykes/real-world-ember
- Real World Ruby Apps https://github.com/jeromedalbert/real-world-ruby-apps
- Real World React https://github.com/jeromedalbert/real-world-react
- Real World Django https://github.com/ckrybus/real-world-django
How you can analyze Real World Rails apps
Find job subclasses
This will find most, but not all job subclasses (requires ag):
# Outputs jobs source in terminal ag --ruby '< [A-Za-z]+Job\b' # Open each job in your editor (e.g. atom) ag --ruby -l '< [A-Za-z]+Job\b' | xargs atom
(used to research Real World Rails Background Jobs)
List models from every Real World Rails application
Interested in seeing how your fellow developers name their models? Run:
bin/rwr models | sort -f | uniq -c | sort -k 1nr -k 2f
Show constants of every Real World Rails app
(this helped when researching Magic Numbers in Ruby & How You Make Them Disappear)
Show view specs
See the file path and source of every view spec in every app:
(this will show 250+ view specs, see them in The Big List of View Specs)
Show model methods
See just the model method names and file paths:
bin/rwr model-method-names
See the model method source and file paths:
Find projects using gem
find apps/ -name Gemfile.lock | xargs grep GEM_NAME_GOES_HERE # e.g. Find all projects using doorkeeper gem find apps/ -name Gemfile.lock | xargs grep doorkeeper
Analyze view naming practices
bin/rwr shared-view-dirs bin/rwr view-naming
Find ideas on how to configure your foreman processes
# Outputs contents from all Procfiles find apps/ -name 'Procfile*' | xargs cat
Settings
Analyzing directories outside of apps/
Prefix the bin/rwr command with the FILES_PATTERN environment variable:
FILES_PATTERN=~/dev/my-rails-app/**/*.rb bin/rwr
Change source output format to markdown
Prefix bin/rwr with the SOURCE_OUTPUT_FORMAT environment variable:
SOURCE_OUTPUT_FORMAT=markdown bin/rwr view-specs
Information for Contributors
How to add a Real World Rails app
Given a GitHub repo for a Rails app githubuser/foo:
# Inside real-world-rails root: # Replace <DEFAULT_BRANCH> with correct branch (probably 'main'). GIT_LFS_SKIP_SMUDGE=1 git submodule add -b <DEFAULT_BRANCH> git@github.com:githubuser/foo.git apps/foo
How to remove a git submodule
Only use this if a previously public repo has been removed:
# Remove the submodule from .git/config git submodule deinit -f path/to/submodule # Remove the submodule from .git/modules rm -rf .git/modules/path/to/submodule # Remove from .gitmodules and remove the submodule directory git rm -f path/to/submodule
Writing an Inspector? Some docs to help understand AST, Parser…
The inspectors are responsible for the analysis of the Rails apps.
Review the existing inspectors if you're looking for some info on how to write a new one, and see these API docs: