rails_best_practices is a code metric tool to check the quality of Rails code.
It supports the following ORM/ODMs:
And the following template engines:
rails_best_practices supports Ruby 1.9.3 or newer.
Railscasts - #252 Metrics Metrics Metrics
At the root directory of a Rails app, run:
rails_best_practices .
Or for HTML output:
rails_best_practices -f html .
By default rails_best_practices will parse code in the vendor
, spec
, test
and features
directories.
To exclude a directory simply call it with -e
or --exclude
:
rails_best_practices -e "db/migrate" .
To exclude multiple directories, separate them with comma:
rails_best_practices -e "db/migrate,vendor" .
To see the full list of command-line options, run:
$ rails_best_practices -h
Usage: rails_best_practices [options]
-d, --debug Debug mode
-f, --format FORMAT output format
--without-color only output plain text without color
--with-textmate open file by textmate in html format
--with-vscode open file by vscode in html format
--with-sublime open file by sublime in html format (requires https://github.com/asuth/subl-handler)
--with-mvim open file by mvim in html format
--with-github GITHUB_NAME open file on github in html format. GITHUB_NAME is like railsbp/rails-bestpractices OR full URL to GitHub:FI repo
--with-hg display hg commit and username, only support html format
--with-git display git commit and username, only support html format
--template TEMPLATE customize erb template
--output-file OUTPUT_FILE output html file for the analyzing result
--silent silent mode
--vendor include vendor files
--spec include spec files
--test include test files
--features include features files
-x, --exclude PATTERNS Don't analyze files matching a pattern
(comma-separated regexp list)
-o, --only PATTERNS analyze files only matching a pattern
(comma-separated regexp list)
-g, --generate Generate configuration yaml
-c, --config CONFIG_PATH configuration file location (defaults to config/rails_best_practices.yml)
-v, --version Show this version
-h, --help Show this message
Homepage: http://rails-bestpractices.com
GitHub: http://github.com/railsbp/rails_best_practices
Team Blog http://rails-bestpractices.com
Google Group: https://groups.google.com/group/rails_best_practices
Wiki: http://github.com/railsbp/rails_best_practices/wiki
Issue Tracker: http://github.com/railsbp/rails_best_practices/issues
gem install rails_best_practices
or add it to the Gemfile
gem "rails_best_practices"
Install https://github.com/asuth/subl-handler
If you use TextMate 2
, you can install the RailsBestPractices.tmbundle bundle.
If you install the rails_best_practices with bundler-installed GitHub-sourced gem, please use the following command instead.
bundle exec rails_best_practices .
If you encounter a NoMethodError exception, or a syntax error, you can use debug mode to discover which file is to blame:
rails_best_practices -d .
That will provide the error's stack trace and the source code of the file which is causing the error.
First run:
rails_best_practices -g
to generate rails_best_practices.yml
file.
Now you can customize this configuration file. The default configuration is as follows:
AddModelVirtualAttributeCheck: { }
AlwaysAddDbIndexCheck: { }
#CheckSaveReturnValueCheck: { }
#CheckDestroyReturnValueCheck: { }
DefaultScopeIsEvilCheck: { }
DryBundlerInCapistranoCheck: { }
#HashSyntaxCheck: { }
IsolateSeedDataCheck: { }
KeepFindersOnTheirOwnModelCheck: { }
LawOfDemeterCheck: { }
#LongLineCheck: { max_line_length: 80 }
MoveCodeIntoControllerCheck: { }
MoveCodeIntoHelperCheck: { array_count: 3 }
MoveCodeIntoModelCheck: { use_count: 2 }
MoveFinderToNamedScopeCheck: { }
MoveModelLogicIntoModelCheck: { use_count: 4 }
NeedlessDeepNestingCheck: { nested_count: 2 }
NotRescueExceptionCheck: { }
NotUseDefaultRouteCheck: { }
NotUseTimeAgoInWordsCheck: { }
OveruseRouteCustomizationsCheck: { customize_count: 3 }
ProtectMassAssignmentCheck: { }
RemoveEmptyHelpersCheck: { }
#RemoveTabCheck: { }
RemoveTrailingWhitespaceCheck: { }
RemoveUnusedMethodsInControllersCheck: { except_methods: [] }
RemoveUnusedMethodsInHelpersCheck: { except_methods: [] }
RemoveUnusedMethodsInModelsCheck: { except_methods: [] }
ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 2 }
ReplaceInstanceVariableWithLocalVariableCheck: { }
RestrictAutoGeneratedRoutesCheck: { }
SimplifyRenderInControllersCheck: { }
SimplifyRenderInViewsCheck: { }
#UseBeforeFilterCheck: { customize_count: 2 }
UseModelAssociationCheck: { }
UseMultipartAlternativeAsContentTypeOfEmailCheck: { }
UseObserverCheck: { }
#UseParenthesesInMethodDefCheck: { }
UseQueryAttributeCheck: { }
UseSayWithTimeInMigrationsCheck: { }
UseScopeAccessCheck: { }
UseTurboSprocketsRails3Check: { }
Now, at the root directory of a Rails app, run:
rails_best_practices . -c config/rails_best_practices.yml
You can remove or comment a review to disable it, and you can change the options.
You can apply the ignored_files
option on any rule by giving a regexp or array of regexps describing the path of the files you don't want to be checked:
DefaultScopeIsEvilCheck: { ignored_files: 'user\.rb' }
LongLineCheck: { max_line_length: 80, ignored_files: ['db/migrate', 'config/initializers'] }
Move code from Controller to Model
RESTful Conventions
Model
Mailer
Migration
Controller
before_filter
(disabled by default)Helper
View
Deployment
Other
If you want to write your own checklist (some checklist only for your Rails projects), please read this first, How to write your own check list?
If you want to add your rails best practices into the gem, please post your best practices on http://rails-bestpractices.com
We provide Rails consulting services, you can contact us by Twitter or email.
Follow us on twitter: http://twitter.com/railsbp
Send us email: team@railsbp.com
Copyright © 2009 - 2022 Richard Huang (flyerhzm@gmail.com), released under the MIT license