- Use standard
- Avoid conditional modifiers (lines that end with conditionals). 36491dbb9
- Avoid multiple assignments per line (
one, two = 1, 2
). #109 - Avoid organizational comments (
# Validations
). #63 - Avoid ternary operators (
boolean ? true : false
). Use multi-lineif
instead to emphasize code branches. 36491dbb9 - Avoid bang (!) method names. Prefer descriptive names. #122
- Name variables created by a factory after the factory (
user_factory
createsuser
). - Prefer nested class and module definitions over the shorthand version Example #332
- Prefer
detect
overfind
. 0d819844 - Prefer
select
overfind_all
. 0d819844 - Prefer
map
overcollect
. 0d819844 - Prefer
reduce
overinject
. #237 - Prefer
&:method_name
to{ |item| item.method_name }
for simple method calls. #183 - Use
_
for unused block parameters. 0d819844 - Prefix unused variables or parameters with underscore (
_
). #335 - Suffix variables holding a factory with
_factory
(user_factory
). - Use a leading underscore when defining instance variables for memoization. #373
- Use
%()
for single-line strings containing double-quotes that require interpolation. 36491dbb9 - Use
?
suffix for predicate methods. 0d819844 - Use
def self.method
, notclass << self
. 40090e22 - Use
def
with parentheses when there are arguments. 36491dbb9 - Use heredocs for multi-line strings. 36491dbb9
- Order class methods above instance methods. #320
- Prefer method invocation over instance variables. #331
- Avoid optional parameters. Does the method do too much?
- Avoid monkey-patching.
- Generate necessary Bundler binstubs for the project, such as
rake
andrspec
, and add them to version control. - Prefer classes to modules when designing functionality that is shared by multiple models.
- Prefer
private
when indicating scope. Useprotected
only with comparison methods likedef ==(other)
,def <(other)
, anddef >(other)
.
- Specify the Ruby version to be used on the project in the
Gemfile
. - Use a pessimistic version in the
Gemfile
for gems that follow semantic versioning, such asrspec
,factory_bot
, andcapybara
. - Use a versionless
Gemfile
declarations for gems that are safe to update often, such as pg, thin, and debugger. - Use an exact version in the
Gemfile
for fragile gems, such as Rails.
- Declare dependencies in the
<PROJECT_NAME>.gemspec
file. - Reference the
gemspec
in theGemfile
. - Use Appraisal to test the gem against multiple versions of gem dependencies (such as Rails in a Rails engine).
- Use Bundler to manage the gem's dependencies.
- Use continuous integration (CI) to show build status within the code review process and to test against multiple Ruby versions.
- Review the recommended practices outlined in Heroku's HTTP API Design Guide before designing a new API.
- Write integration tests for your API endpoints. When the primary consumer of the API is a JavaScript client maintained within the same code base as the provider of the API, write system specs. Otherwise write request specs.