mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1350 lines
40 KiB
1350 lines
40 KiB
# Common configuration.
|
|
|
|
inherit_mode:
|
|
merge:
|
|
- Exclude
|
|
|
|
AllCops:
|
|
Exclude:
|
|
- '**/app/assets/**/*'
|
|
- bin/*
|
|
# Exclude db/schema.rb and db/[CONFIGURATION_NAMESPACE]_schema.rb by default.
|
|
# See: https://guides.rubyonrails.org/active_record_multiple_databases.html#setting-up-your-application
|
|
- db/*schema.rb
|
|
- log/**/*
|
|
- public/**/*
|
|
- storage/**/*
|
|
# Enable checking Active Support extensions.
|
|
# See: https://docs.rubocop.org/rubocop/configuration.html#enable-checking-active-support-extensions
|
|
ActiveSupportExtensionsEnabled: true
|
|
# What version of Rails is the inspected code using? If a value is specified
|
|
# for `TargetRailsVersion` then it is used. Acceptable values are specified
|
|
# as a float (e.g., 7.2); the patch version of Rails should not be included.
|
|
# If `TargetRailsVersion` is not set, RuboCop will parse the Gemfile.lock or
|
|
# gems.locked file to find the version of Rails that has been bound to the
|
|
# application. If neither of those files exist, RuboCop will use Rails 5.0
|
|
# as the default.
|
|
TargetRailsVersion: ~
|
|
# By specifying `MigratedSchemaVersion` option, migration files that have been migrated can be ignored.
|
|
# When `MigratedSchemaVersion: '20241231000000'` is set. Migration files lower than or equal to '20250101000000' will be ignored.
|
|
# For example, this is the timestamp in db/migrate/20250101000000_create_articles.rb.
|
|
MigratedSchemaVersion: '19700101000000' # NOTE: Used as a sentinel value for the UNIX epoch time.
|
|
|
|
Lint/NumberConversion:
|
|
# Add Rails' duration methods to the ignore list for `Lint/NumberConversion`
|
|
# so that calling `to_i` on one of these does not register an offense.
|
|
# See: https://github.com/rubocop/rubocop/issues/8950
|
|
AllowedMethods:
|
|
- ago
|
|
- from_now
|
|
- second
|
|
- seconds
|
|
- minute
|
|
- minutes
|
|
- hour
|
|
- hours
|
|
- day
|
|
- days
|
|
- week
|
|
- weeks
|
|
- fortnight
|
|
- fortnights
|
|
- in_milliseconds
|
|
AllowedPatterns: []
|
|
|
|
Lint/RedundantSafeNavigation:
|
|
# Add `presence` and `present?` methods to the default of the RuboCop core.
|
|
# https://github.com/rubocop/rubocop/blob/v1.51.0/config/default.yml#L2148-L2159
|
|
AllowedMethods:
|
|
- instance_of?
|
|
- kind_of?
|
|
- is_a?
|
|
- eql?
|
|
- respond_to?
|
|
- equal?
|
|
- presence
|
|
- present?
|
|
|
|
Lint/SafeNavigationChain:
|
|
# Add `presence_in` method to the default of the RuboCop core:
|
|
# https://github.com/rubocop/rubocop/blob/v1.56.0/config/default.yml#L2265-L2271
|
|
AllowedMethods:
|
|
- present?
|
|
- blank?
|
|
- presence
|
|
- presence_in
|
|
- try
|
|
- try!
|
|
- in?
|
|
|
|
Lint/UselessAccessModifier:
|
|
# Add methods from `ActiveSupport::Concern` and `Module::Concerning`:
|
|
# https://api.rubyonrails.org/classes/ActiveSupport/Concern.html
|
|
# https://api.rubyonrails.org/classes/Module/Concerning
|
|
inherit_mode:
|
|
merge:
|
|
- ContextCreatingMethods
|
|
ContextCreatingMethods:
|
|
- class_methods
|
|
- included
|
|
- prepended
|
|
- concern
|
|
- concerning
|
|
|
|
Lint/UselessMethodDefinition:
|
|
# Avoids conflict with `Rails/LexicallyScopedActionFilter` cop.
|
|
Exclude:
|
|
- '**/app/controllers/**/*.rb'
|
|
- '**/app/mailers/**/*.rb'
|
|
|
|
Rails:
|
|
Enabled: true
|
|
DocumentationBaseURL: https://docs.rubocop.org/rubocop-rails
|
|
|
|
Rails/ActionControllerFlashBeforeRender:
|
|
Description: 'Use `flash.now` instead of `flash` before `render`.'
|
|
Enabled: 'pending'
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.16'
|
|
|
|
Rails/ActionControllerTestCase:
|
|
Description: 'Use `ActionDispatch::IntegrationTest` instead of `ActionController::TestCase`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#integration-testing'
|
|
Reference: 'https://api.rubyonrails.org/classes/ActionController/TestCase.html'
|
|
Enabled: 'pending'
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.14'
|
|
Include:
|
|
- '**/test/**/*.rb'
|
|
|
|
Rails/ActionFilter:
|
|
Description: 'Enforces consistent use of action filter methods.'
|
|
Enabled: false
|
|
VersionAdded: '0.19'
|
|
VersionChanged: '2.22'
|
|
EnforcedStyle: action
|
|
SupportedStyles:
|
|
- action
|
|
- filter
|
|
Include:
|
|
- '**/app/controllers/**/*.rb'
|
|
- '**/app/mailers/**/*.rb'
|
|
|
|
Rails/ActionOrder:
|
|
Description: 'Enforce consistent ordering of controller actions.'
|
|
Enabled: pending
|
|
VersionAdded: '2.17'
|
|
ExpectedOrder:
|
|
- index
|
|
- show
|
|
- new
|
|
- edit
|
|
- create
|
|
- update
|
|
- destroy
|
|
Include:
|
|
- '**/app/controllers/**/*.rb'
|
|
|
|
Rails/ActiveRecordAliases:
|
|
Description: >-
|
|
Avoid Active Record aliases:
|
|
Use `update` instead of `update_attributes`.
|
|
Use `update!` instead of `update_attributes!`.
|
|
Enabled: true
|
|
VersionAdded: '0.53'
|
|
SafeAutoCorrect: false
|
|
|
|
Rails/ActiveRecordCallbacksOrder:
|
|
Description: 'Order callback declarations in the order in which they will be executed.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#callbacks-order'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.7'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/ActiveRecordOverride:
|
|
Description: >-
|
|
Check for overriding Active Record methods instead of using
|
|
callbacks.
|
|
Enabled: true
|
|
Severity: warning
|
|
VersionAdded: '0.67'
|
|
VersionChanged: '2.18'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/ActiveSupportAliases:
|
|
Description: >-
|
|
Avoid ActiveSupport aliases of standard ruby methods:
|
|
`String#starts_with?`, `String#ends_with?`,
|
|
`Array#append`, `Array#prepend`.
|
|
Enabled: true
|
|
VersionAdded: '0.48'
|
|
|
|
Rails/ActiveSupportOnLoad:
|
|
Description: 'Use `ActiveSupport.on_load(...)` to patch Rails framework classes.'
|
|
Enabled: 'pending'
|
|
Reference:
|
|
- 'https://api.rubyonrails.org/classes/ActiveSupport/LazyLoadHooks.html'
|
|
- 'https://guides.rubyonrails.org/engines.html#available-load-hooks'
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.16'
|
|
VersionChanged: '2.24'
|
|
|
|
Rails/AddColumnIndex:
|
|
Description: >-
|
|
Rails migrations don't make use of a given `index` key, but also
|
|
doesn't given an error when it's used, so it makes it seem like an
|
|
index might be used.
|
|
Enabled: pending
|
|
VersionAdded: '2.11'
|
|
VersionChanged: '2.20'
|
|
Include:
|
|
- db/**/*.rb
|
|
|
|
Rails/AfterCommitOverride:
|
|
Description: >-
|
|
Enforces that there is only one call to `after_commit`
|
|
(and its aliases - `after_create_commit`, `after_update_commit`,
|
|
and `after_destroy_commit`) with the same callback name per model.
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.8'
|
|
|
|
Rails/ApplicationController:
|
|
Description: 'Check that controllers subclass ApplicationController.'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.4'
|
|
VersionChanged: '2.5'
|
|
|
|
Rails/ApplicationJob:
|
|
Description: 'Check that jobs subclass ApplicationJob.'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '0.49'
|
|
VersionChanged: '2.5'
|
|
|
|
Rails/ApplicationMailer:
|
|
Description: 'Check that mailers subclass ApplicationMailer.'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.4'
|
|
VersionChanged: '2.5'
|
|
|
|
Rails/ApplicationRecord:
|
|
Description: 'Check that models subclass ApplicationRecord.'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '0.49'
|
|
VersionChanged: '2.26'
|
|
Exclude:
|
|
- db/**/*.rb
|
|
|
|
Rails/ArelStar:
|
|
Description: 'Enforces `Arel.star` instead of `"*"` for expanded columns.'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.9'
|
|
|
|
Rails/AssertNot:
|
|
Description: 'Use `assert_not` instead of `assert !`.'
|
|
Enabled: true
|
|
VersionAdded: '0.56'
|
|
Include:
|
|
- '**/test/**/*'
|
|
|
|
Rails/AttributeDefaultBlockValue:
|
|
Description: 'Pass method call in block for attribute option `default`.'
|
|
Enabled: pending
|
|
VersionAdded: '2.9'
|
|
Include:
|
|
- '**/app/models/**/*'
|
|
|
|
Rails/BelongsTo:
|
|
Description: >-
|
|
Use `optional: true` instead of `required: false` for
|
|
`belongs_to` relations.
|
|
Reference:
|
|
- https://guides.rubyonrails.org/5_0_release_notes.html
|
|
- https://github.com/rails/rails/pull/18937
|
|
Enabled: true
|
|
VersionAdded: '0.62'
|
|
|
|
Rails/Blank:
|
|
Description: 'Enforces use of `blank?`.'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '0.48'
|
|
VersionChanged: '2.10'
|
|
# Convert usages of `nil? || empty?` to `blank?`
|
|
NilOrEmpty: true
|
|
# Convert usages of `!present?` to `blank?`
|
|
NotPresent: true
|
|
# Convert usages of `unless present?` to `if blank?`
|
|
UnlessPresent: true
|
|
|
|
Rails/BulkChangeTable:
|
|
Description: 'Check whether alter queries are combinable.'
|
|
Reference:
|
|
- https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-change_table
|
|
- https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Table.html
|
|
Enabled: true
|
|
VersionAdded: '0.57'
|
|
VersionChanged: '2.20'
|
|
Database: null
|
|
SupportedDatabases:
|
|
- mysql
|
|
- postgresql
|
|
Include:
|
|
- db/**/*.rb
|
|
|
|
Rails/CompactBlank:
|
|
Description: 'Checks if collection can be blank-compacted with `compact_blank`.'
|
|
Enabled: pending
|
|
Safe: false
|
|
VersionAdded: '2.13'
|
|
|
|
Rails/ContentTag:
|
|
Description: 'Use `tag.something` instead of `tag(:something)`.'
|
|
Reference:
|
|
- 'https://github.com/rubocop/rubocop-rails/issues/260'
|
|
- 'https://github.com/rails/rails/issues/25195'
|
|
- 'https://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-content_tag'
|
|
Enabled: true
|
|
VersionAdded: '2.6'
|
|
VersionChanged: '2.12'
|
|
# This `Exclude` config prevents false positives for `tag` calls to `has_one: tag` and Puma configuration:
|
|
# https://puma.io/puma/Puma/DSL.html#tag-instance_method
|
|
# No helpers are used in normal models and configs.
|
|
Exclude:
|
|
- '**/app/models/**/*.rb'
|
|
- '**/config/**/*.rb'
|
|
|
|
Rails/CreateTableWithTimestamps:
|
|
Description: >-
|
|
Checks the migration for which timestamps are not included
|
|
when creating a new table.
|
|
Enabled: true
|
|
VersionAdded: '0.52'
|
|
VersionChanged: '2.20'
|
|
Include:
|
|
- db/**/*.rb
|
|
Exclude:
|
|
# Respect the `active_storage_variant_records` table of `*_create_active_storage_tables.active_storage.rb`
|
|
# and `*_create_active_storage_variant_records.active_storage.rb`
|
|
# auto-generated by `bin/rails active_storage:install` even if `created_at` is not specified.
|
|
- db/**/*_create_active_storage_tables.active_storage.rb
|
|
- db/**/*_create_active_storage_variant_records.active_storage.rb
|
|
|
|
Rails/DangerousColumnNames:
|
|
Description: >-
|
|
Avoid dangerous column names.
|
|
Enabled: pending
|
|
Severity: warning
|
|
VersionAdded: '2.21'
|
|
Include:
|
|
- 'db/**/*.rb'
|
|
|
|
Rails/Date:
|
|
Description: >-
|
|
Checks the correct usage of date aware methods,
|
|
such as Date.today, Date.current etc.
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '0.30'
|
|
VersionChanged: '2.11'
|
|
# The value `strict` disallows usage of `Date.today`, `Date.current`,
|
|
# `Date#to_time` etc.
|
|
# The value `flexible` allows usage of `Date.current`, `Date.yesterday`, etc
|
|
# (but not `Date.today`) which are overridden by ActiveSupport to handle current
|
|
# time zone.
|
|
EnforcedStyle: flexible
|
|
SupportedStyles:
|
|
- strict
|
|
- flexible
|
|
AllowToTime: true
|
|
|
|
Rails/DefaultScope:
|
|
Description: 'Avoid use of `default_scope`.'
|
|
Enabled: false
|
|
VersionAdded: '2.7'
|
|
|
|
Rails/Delegate:
|
|
Description: 'Prefer delegate method for delegations.'
|
|
Enabled: true
|
|
VersionAdded: '0.21'
|
|
VersionChanged: '2.30'
|
|
# When set to true, using the target object as a prefix of the
|
|
# method name without using the `delegate` method will be a
|
|
# violation. When set to false, this case is legal.
|
|
EnforceForPrefixed: true
|
|
Exclude:
|
|
- '**/app/controllers/**/*.rb'
|
|
|
|
Rails/DelegateAllowBlank:
|
|
Description: 'Do not use allow_blank as an option to delegate.'
|
|
Enabled: true
|
|
VersionAdded: '0.44'
|
|
|
|
Rails/DeprecatedActiveModelErrorsMethods:
|
|
Description: 'Avoid manipulating ActiveModel errors hash directly.'
|
|
Enabled: pending
|
|
Severity: warning
|
|
Safe: false
|
|
VersionAdded: '2.14'
|
|
VersionChanged: '2.18'
|
|
|
|
Rails/DotSeparatedKeys:
|
|
Description: 'Enforces the use of dot-separated keys instead of `:scope` options in `I18n` translation methods.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#dot-separated-keys'
|
|
Enabled: pending
|
|
VersionAdded: '2.15'
|
|
|
|
Rails/DuplicateAssociation:
|
|
Description: "Don't repeat associations in a model."
|
|
Enabled: pending
|
|
Severity: warning
|
|
VersionAdded: '2.14'
|
|
VersionChanged: '2.18'
|
|
|
|
Rails/DuplicateScope:
|
|
Description: 'Multiple scopes share this same expression.'
|
|
Enabled: pending
|
|
Severity: warning
|
|
VersionAdded: '2.14'
|
|
VersionChanged: '2.18'
|
|
|
|
Rails/DurationArithmetic:
|
|
Description: 'Do not use duration as arithmetic operand with `Time.current`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#duration-arithmetic'
|
|
Enabled: pending
|
|
VersionAdded: '2.13'
|
|
|
|
Rails/DynamicFindBy:
|
|
Description: 'Use `find_by` instead of dynamic `find_by_*`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#find_by'
|
|
Enabled: true
|
|
Safe: false
|
|
VersionAdded: '0.44'
|
|
VersionChanged: '2.10'
|
|
# The `Whitelist` has been deprecated, Please use `AllowedMethods` instead.
|
|
Whitelist:
|
|
- find_by_sql
|
|
- find_by_token_for
|
|
AllowedMethods:
|
|
- find_by_sql
|
|
- find_by_token_for
|
|
AllowedReceivers:
|
|
- Gem::Specification
|
|
- page # Prevents a warning for `page.find_by_id`. See: https://github.com/rubocop/rubocop-rails/issues/778
|
|
|
|
Rails/EagerEvaluationLogMessage:
|
|
Description: 'Checks that blocks are used for interpolated strings passed to `Rails.logger.debug`.'
|
|
Reference: 'https://guides.rubyonrails.org/debugging_rails_applications.html#impact-of-logs-on-performance'
|
|
Enabled: pending
|
|
VersionAdded: '2.11'
|
|
|
|
Rails/EnumHash:
|
|
Description: 'Prefer hash syntax over array syntax when defining enums.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#enums'
|
|
Enabled: true
|
|
VersionAdded: '2.3'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/EnumSyntax:
|
|
Description: 'Use positional arguments over keyword arguments when defining enums.'
|
|
Enabled: pending
|
|
Severity: warning
|
|
VersionAdded: '2.26'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
- '**/lib/**/*.rb'
|
|
|
|
Rails/EnumUniqueness:
|
|
Description: 'Avoid duplicate integers in hash-syntax `enum` declaration.'
|
|
Enabled: true
|
|
VersionAdded: '0.46'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/Env:
|
|
Description: 'Use Feature Flags or config instead of `Rails.env`.'
|
|
Enabled: false
|
|
VersionAdded: '2.34'
|
|
|
|
Rails/EnvLocal:
|
|
Description: 'Use `Rails.env.local?` instead of `Rails.env.development? || Rails.env.test?`.'
|
|
Enabled: pending
|
|
VersionAdded: '2.22'
|
|
|
|
Rails/EnvironmentComparison:
|
|
Description: "Favor `Rails.env.production?` over `Rails.env == 'production'`."
|
|
Enabled: true
|
|
VersionAdded: '0.52'
|
|
|
|
Rails/EnvironmentVariableAccess:
|
|
Description: 'Do not access `ENV` directly after initialization.'
|
|
# TODO: Set to `pending` status in RuboCop Rails 2 series when migration doc will be written.
|
|
Enabled: false
|
|
VersionAdded: '2.10'
|
|
VersionChanged: '2.24'
|
|
Include:
|
|
- '**/app/**/*.rb'
|
|
- '**/config/initializers/**/*.rb'
|
|
- '**/lib/**/*.rb'
|
|
Exclude:
|
|
- '**/lib/**/*.rake'
|
|
AllowReads: false
|
|
AllowWrites: false
|
|
|
|
Rails/Exit:
|
|
Description: >-
|
|
Favor `fail`, `break`, `return`, etc. over `exit` in
|
|
application or library code outside of Rake files to avoid
|
|
exits during unit testing or running in production.
|
|
Enabled: true
|
|
VersionAdded: '0.41'
|
|
Include:
|
|
- '**/app/**/*.rb'
|
|
- '**/config/**/*.rb'
|
|
- '**/lib/**/*.rb'
|
|
Exclude:
|
|
- '**/lib/**/*.rake'
|
|
|
|
Rails/ExpandedDateRange:
|
|
Description: 'Checks for expanded date range.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#date-time-range'
|
|
Enabled: pending
|
|
VersionAdded: '2.11'
|
|
|
|
Rails/FilePath:
|
|
Description: 'Use `Rails.root.join` for file path joining.'
|
|
Enabled: true
|
|
VersionAdded: '0.47'
|
|
VersionChanged: '2.4'
|
|
EnforcedStyle: slashes
|
|
SupportedStyles:
|
|
- slashes
|
|
- arguments
|
|
|
|
Rails/FindBy:
|
|
Description: 'Prefer find_by over where.first.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#find_by'
|
|
Enabled: true
|
|
VersionAdded: '0.30'
|
|
VersionChanged: '2.21'
|
|
IgnoreWhereFirst: true
|
|
|
|
Rails/FindById:
|
|
Description: >-
|
|
Favor the use of `find` over `where.take!`, `find_by!`, and `find_by_id!` when you
|
|
need to retrieve a single record by primary key when you expect it to be found.
|
|
StyleGuide: 'https://rails.rubystyle.guide/#find'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.7'
|
|
|
|
Rails/FindByOrAssignmentMemoization:
|
|
Description: 'Avoid memoizing `find_by` results with `||=`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#find-by-memoization'
|
|
Enabled: pending
|
|
Safe: false
|
|
VersionAdded: '2.33'
|
|
|
|
Rails/FindEach:
|
|
Description: 'Prefer all.find_each over all.each.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#find-each'
|
|
Enabled: true
|
|
Safe: false
|
|
VersionAdded: '0.30'
|
|
VersionChanged: '2.21'
|
|
AllowedMethods:
|
|
# Methods that don't work well with `find_each`.
|
|
- order
|
|
- limit
|
|
- select
|
|
- lock
|
|
AllowedPatterns: []
|
|
|
|
Rails/FreezeTime:
|
|
Description: 'Prefer `freeze_time` over `travel_to` with an argument of the current time.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#freeze-time'
|
|
Enabled: pending
|
|
VersionAdded: '2.16'
|
|
SafeAutoCorrect: false
|
|
|
|
Rails/HasAndBelongsToMany:
|
|
Description: 'Prefer has_many :through to has_and_belongs_to_many.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#has-many-through'
|
|
Enabled: true
|
|
VersionAdded: '0.12'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/HasManyOrHasOneDependent:
|
|
Description: 'Define the dependent option to the has_many and has_one associations.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#has_many-has_one-dependent-option'
|
|
Enabled: true
|
|
VersionAdded: '0.50'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/HelperInstanceVariable:
|
|
Description: 'Do not use instance variables in helpers.'
|
|
Enabled: true
|
|
VersionAdded: '2.0'
|
|
Include:
|
|
- '**/app/helpers/**/*.rb'
|
|
|
|
Rails/HttpPositionalArguments:
|
|
Description: 'Use keyword arguments instead of positional arguments in http method calls.'
|
|
Enabled: true
|
|
VersionAdded: '0.44'
|
|
Include:
|
|
- 'spec/**/*'
|
|
- 'test/**/*'
|
|
|
|
Rails/HttpStatus:
|
|
Description: 'Enforces use of symbolic or numeric value to define HTTP status.'
|
|
Enabled: true
|
|
VersionAdded: '0.54'
|
|
VersionChanged: '2.11'
|
|
EnforcedStyle: symbolic
|
|
SupportedStyles:
|
|
- numeric
|
|
- symbolic
|
|
|
|
Rails/HttpStatusNameConsistency:
|
|
Description: 'Enforces consistency by using the current HTTP status names.'
|
|
Enabled: pending
|
|
Severity: warning
|
|
VersionAdded: '2.34'
|
|
Include:
|
|
- '**/app/controllers/**/*.rb'
|
|
|
|
Rails/I18nLazyLookup:
|
|
Description: 'Checks for places where I18n "lazy" lookup can be used.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#lazy-lookup'
|
|
Reference: 'https://guides.rubyonrails.org/i18n.html#lazy-lookup'
|
|
Enabled: pending
|
|
VersionAdded: '2.14'
|
|
EnforcedStyle: lazy
|
|
SupportedStyles:
|
|
- lazy
|
|
- explicit
|
|
Include:
|
|
- '**/app/controllers/**/*.rb'
|
|
|
|
Rails/I18nLocaleAssignment:
|
|
Description: 'Prefer the usage of `I18n.with_locale` instead of manually updating `I18n.locale` value.'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.11'
|
|
Include:
|
|
- spec/**/*.rb
|
|
- test/**/*.rb
|
|
|
|
Rails/I18nLocaleTexts:
|
|
Description: 'Enforces use of I18n and locale files instead of locale specific strings.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#locale-texts'
|
|
Enabled: pending
|
|
VersionAdded: '2.14'
|
|
|
|
Rails/IgnoredColumnsAssignment:
|
|
Description: 'Looks for assignments of `ignored_columns` that override previous assignments.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#append-ignored-columns'
|
|
Enabled: pending
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.17'
|
|
|
|
Rails/IgnoredSkipActionFilterOption:
|
|
Description: 'Checks that `if` and `only` (or `except`) are not used together as options of `skip_*` action filter.'
|
|
Reference: 'https://api.rubyonrails.org/classes/AbstractController/Callbacks/ClassMethods.html#method-i-_normalize_callback_options'
|
|
Enabled: true
|
|
VersionAdded: '0.63'
|
|
Include:
|
|
- '**/app/controllers/**/*.rb'
|
|
- '**/app/mailers/**/*.rb'
|
|
|
|
Rails/IndexBy:
|
|
Description: 'Prefer `index_by` over `each_with_object`, `to_h`, or `map`.'
|
|
Enabled: true
|
|
VersionAdded: '2.5'
|
|
VersionChanged: '2.8'
|
|
|
|
Rails/IndexWith:
|
|
Description: 'Prefer `index_with` over `each_with_object`, `to_h`, or `map`.'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.5'
|
|
VersionChanged: '2.33'
|
|
|
|
Rails/Inquiry:
|
|
Description: "Prefer Ruby's comparison operators over Active Support's `Array#inquiry` and `String#inquiry`."
|
|
StyleGuide: 'https://rails.rubystyle.guide/#inquiry'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.7'
|
|
|
|
Rails/InverseOf:
|
|
Description: 'Checks for associations where the inverse cannot be determined automatically.'
|
|
Reference:
|
|
- https://guides.rubyonrails.org/association_basics.html#bi-directional-associations
|
|
- https://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Setting+Inverses
|
|
Enabled: true
|
|
VersionAdded: '0.52'
|
|
IgnoreScopes: false
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/LexicallyScopedActionFilter:
|
|
Description: "Checks that methods specified in the filter's `only` or `except` options are explicitly defined in the class."
|
|
StyleGuide: 'https://rails.rubystyle.guide#lexically-scoped-action-filter'
|
|
Enabled: true
|
|
Safe: false
|
|
VersionAdded: '0.52'
|
|
Include:
|
|
- '**/app/controllers/**/*.rb'
|
|
- '**/app/mailers/**/*.rb'
|
|
|
|
Rails/LinkToBlank:
|
|
Description: 'Checks that `link_to` with a `target: "_blank"` have a `rel: "noopener"` option passed to them.'
|
|
Reference:
|
|
- https://mathiasbynens.github.io/rel-noopener/
|
|
- https://html.spec.whatwg.org/multipage/links.html#link-type-noopener
|
|
- https://html.spec.whatwg.org/multipage/links.html#link-type-noreferrer
|
|
Enabled: true
|
|
VersionAdded: '0.62'
|
|
|
|
Rails/MailerName:
|
|
Description: 'Mailer should end with `Mailer` suffix.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#mailer-name'
|
|
Enabled: 'pending'
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.7'
|
|
Include:
|
|
- '**/app/mailers/**/*.rb'
|
|
|
|
Rails/MatchRoute:
|
|
Description: >-
|
|
Don't use `match` to define any routes unless there is a need to map multiple request types
|
|
among [:get, :post, :patch, :put, :delete] to a single action using the `:via` option.
|
|
StyleGuide: 'https://rails.rubystyle.guide/#no-match-routes'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.7'
|
|
Include:
|
|
- '**/config/routes.rb'
|
|
- '**/config/routes/**/*.rb'
|
|
|
|
Rails/MigrationClassName:
|
|
Description: 'The class name of the migration should match its file name.'
|
|
Enabled: pending
|
|
VersionAdded: '2.14'
|
|
VersionChanged: '2.20'
|
|
Include:
|
|
- db/**/*.rb
|
|
|
|
Rails/MultipleRoutePaths:
|
|
Description: 'Checks for mapping a route with multiple paths, which is deprecated and will be removed in Rails 8.1.'
|
|
Enabled: pending
|
|
Severity: warning
|
|
VersionAdded: '2.29'
|
|
Include:
|
|
- '**/config/routes.rb'
|
|
- '**/config/routes/**/*.rb'
|
|
|
|
Rails/NegateInclude:
|
|
Description: 'Prefer `collection.exclude?(obj)` over `!collection.include?(obj)`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#exclude'
|
|
Enabled: 'pending'
|
|
Safe: false
|
|
VersionAdded: '2.7'
|
|
VersionChanged: '2.9'
|
|
|
|
Rails/NotNullColumn:
|
|
Description: 'Do not add a NOT NULL column without a default value to existing tables.'
|
|
Enabled: true
|
|
VersionAdded: '0.43'
|
|
VersionChanged: '2.20'
|
|
Database: null
|
|
SupportedDatabases:
|
|
- mysql
|
|
Include:
|
|
- db/**/*.rb
|
|
|
|
Rails/OrderArguments:
|
|
Description: 'Prefer symbol arguments over strings in `order` method.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#order-arguments'
|
|
Enabled: pending
|
|
VersionAdded: '2.33'
|
|
Safe: false
|
|
|
|
Rails/OrderById:
|
|
Description: >-
|
|
Do not use the `id` column for ordering.
|
|
Use a timestamp column to order chronologically.
|
|
StyleGuide: 'https://rails.rubystyle.guide/#order-by-id'
|
|
Enabled: false
|
|
VersionAdded: '2.8'
|
|
|
|
Rails/Output:
|
|
Description: 'Checks for calls to puts, print, etc.'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '0.15'
|
|
VersionChanged: '0.19'
|
|
Include:
|
|
- '**/app/**/*.rb'
|
|
- '**/config/**/*.rb'
|
|
- db/**/*.rb
|
|
- '**/lib/**/*.rb'
|
|
|
|
Rails/OutputSafety:
|
|
Description: 'The use of `html_safe` or `raw` may be a security risk.'
|
|
Enabled: true
|
|
VersionAdded: '0.41'
|
|
|
|
Rails/Pick:
|
|
Description: 'Prefer `pick` over `pluck(...).first`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#pick'
|
|
Enabled: true
|
|
Safe: false
|
|
VersionAdded: '2.6'
|
|
|
|
Rails/Pluck:
|
|
Description: 'Prefer `pluck` over `map { ... }`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#pluck'
|
|
Enabled: 'pending'
|
|
Safe: false
|
|
VersionAdded: '2.7'
|
|
VersionChanged: '2.18'
|
|
|
|
Rails/PluckId:
|
|
Description: 'Use `ids` instead of `pluck(:id)` or `pluck(primary_key)`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#ids'
|
|
Enabled: false
|
|
Safe: false
|
|
VersionAdded: '2.7'
|
|
|
|
Rails/PluckInWhere:
|
|
Description: 'Use `select` instead of `pluck` in `where` query methods.'
|
|
Enabled: 'pending'
|
|
Safe: false
|
|
VersionAdded: '2.7'
|
|
VersionChanged: '2.8'
|
|
EnforcedStyle: conservative
|
|
SupportedStyles:
|
|
- conservative
|
|
- aggressive
|
|
|
|
Rails/PluralizationGrammar:
|
|
Description: 'Checks for incorrect grammar when using methods like `3.day.ago`.'
|
|
Enabled: true
|
|
VersionAdded: '0.35'
|
|
|
|
Rails/Presence:
|
|
Description: 'Checks code that can be written more easily using `Object#presence` defined by Active Support.'
|
|
Enabled: true
|
|
VersionAdded: '0.52'
|
|
VersionChanged: '2.34'
|
|
|
|
Rails/Present:
|
|
Description: 'Enforces use of `present?`.'
|
|
Enabled: true
|
|
VersionAdded: '0.48'
|
|
VersionChanged: '0.67'
|
|
# Convert usages of `!nil? && !empty?` to `present?`
|
|
NotNilAndNotEmpty: true
|
|
# Convert usages of `!blank?` to `present?`
|
|
NotBlank: true
|
|
# Convert usages of `unless blank?` to `if present?`
|
|
UnlessBlank: true
|
|
|
|
Rails/RakeEnvironment:
|
|
Description: 'Include `:environment` as a dependency for all Rake tasks.'
|
|
Enabled: true
|
|
Safe: false
|
|
VersionAdded: '2.4'
|
|
VersionChanged: '2.6'
|
|
Include:
|
|
- '**/Rakefile'
|
|
- '**/*.rake'
|
|
Exclude:
|
|
- '**/lib/capistrano/tasks/**/*.rake'
|
|
|
|
Rails/ReadWriteAttribute:
|
|
Description: >-
|
|
Checks for read_attribute(:attr) and
|
|
write_attribute(:attr, val).
|
|
StyleGuide: 'https://rails.rubystyle.guide#read-attribute'
|
|
Enabled: true
|
|
VersionAdded: '0.20'
|
|
VersionChanged: '0.29'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/RedirectBackOrTo:
|
|
Description: >-
|
|
Use `redirect_back_or_to` instead of `redirect_back` with
|
|
`fallback_location` option.
|
|
Enabled: pending
|
|
Severity: warning
|
|
VersionAdded: '2.34'
|
|
|
|
Rails/RedundantActiveRecordAllMethod:
|
|
Description: Detect redundant `all` used as a receiver for Active Record query methods.
|
|
StyleGuide: 'https://rails.rubystyle.guide/#redundant-all'
|
|
Enabled: pending
|
|
Safe: false
|
|
AllowedReceivers:
|
|
- ActionMailer::Preview
|
|
- ActiveSupport::TimeZone
|
|
VersionAdded: '2.21'
|
|
|
|
Rails/RedundantAllowNil:
|
|
Description: >-
|
|
Finds redundant use of `allow_nil` when `allow_blank` is set to
|
|
certain values in model validations.
|
|
Enabled: true
|
|
VersionAdded: '0.67'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/RedundantForeignKey:
|
|
Description: 'Checks for associations where the `:foreign_key` option is redundant.'
|
|
Enabled: true
|
|
VersionAdded: '2.6'
|
|
|
|
Rails/RedundantPresenceValidationOnBelongsTo:
|
|
Description: 'Checks for redundant presence validation on belongs_to association.'
|
|
Enabled: pending
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.13'
|
|
|
|
Rails/RedundantReceiverInWithOptions:
|
|
Description: 'Checks for redundant receiver in `with_options`.'
|
|
Enabled: true
|
|
VersionAdded: '0.52'
|
|
|
|
Rails/RedundantTravelBack:
|
|
Description: Checks for redundant `travel_back` calls.
|
|
Enabled: pending
|
|
VersionAdded: '2.12'
|
|
Include:
|
|
- spec/**/*.rb
|
|
- test/**/*.rb
|
|
|
|
Rails/ReflectionClassName:
|
|
Description: 'Use a string for `class_name` option value in the definition of a reflection.'
|
|
Enabled: true
|
|
Safe: false
|
|
VersionAdded: '0.64'
|
|
VersionChanged: '2.10'
|
|
|
|
Rails/RefuteMethods:
|
|
Description: 'Use `assert_not` methods instead of `refute` methods.'
|
|
Enabled: true
|
|
VersionAdded: '0.56'
|
|
EnforcedStyle: assert_not
|
|
SupportedStyles:
|
|
- assert_not
|
|
- refute
|
|
Include:
|
|
- '**/test/**/*'
|
|
|
|
Rails/RelativeDateConstant:
|
|
Description: 'Do not assign relative date to constants.'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '0.48'
|
|
VersionChanged: '2.13'
|
|
|
|
Rails/RenderInline:
|
|
Description: 'Prefer using a template over inline rendering.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#inline-rendering'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.7'
|
|
|
|
Rails/RenderPlainText:
|
|
Description: 'Prefer `render plain:` over `render text:`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#plain-text-rendering'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.7'
|
|
# Convert only when `content_type` is explicitly set to `text/plain`.
|
|
ContentTypeCompatibility: true
|
|
|
|
Rails/RequestReferer:
|
|
Description: 'Use consistent syntax for request.referer.'
|
|
Enabled: true
|
|
VersionAdded: '0.41'
|
|
EnforcedStyle: referer
|
|
SupportedStyles:
|
|
- referer
|
|
- referrer
|
|
|
|
Rails/RequireDependency:
|
|
Description: 'Do not use `require_dependency` when running in Zeitwerk mode. `require_dependency` is for autoloading in classic mode.'
|
|
Reference: 'https://guides.rubyonrails.org/autoloading_and_reloading_constants.html'
|
|
Enabled: false
|
|
VersionAdded: '2.10'
|
|
|
|
Rails/ResponseParsedBody:
|
|
Description: Prefer `response.parsed_body` to custom parsing logic for `response.body`.
|
|
Enabled: pending
|
|
Safe: false
|
|
VersionAdded: '2.18'
|
|
VersionChanged: '2.19'
|
|
Include:
|
|
- spec/controllers/**/*.rb
|
|
- spec/requests/**/*.rb
|
|
- test/controllers/**/*.rb
|
|
- test/integration/**/*.rb
|
|
|
|
Rails/ReversibleMigration:
|
|
Description: 'Checks whether the change method of the migration file is reversible.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#reversible-migration'
|
|
Reference: 'https://api.rubyonrails.org/classes/ActiveRecord/Migration/CommandRecorder.html'
|
|
Enabled: true
|
|
VersionAdded: '0.47'
|
|
VersionChanged: '2.13'
|
|
Include:
|
|
- db/**/*.rb
|
|
|
|
Rails/ReversibleMigrationMethodDefinition:
|
|
Description: 'Checks whether the migration implements either a `change` method or both an `up` and a `down` method.'
|
|
Enabled: false
|
|
VersionAdded: '2.10'
|
|
VersionChanged: '2.13'
|
|
Include:
|
|
- db/**/*.rb
|
|
|
|
Rails/RootJoinChain:
|
|
Description: 'Use a single `#join` instead of chaining on `Rails.root` or `Rails.public_path`.'
|
|
Enabled: pending
|
|
VersionAdded: '2.13'
|
|
|
|
Rails/RootPathnameMethods:
|
|
Description: 'Use `Rails.root` IO methods instead of passing it to `File`.'
|
|
Enabled: pending
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.16'
|
|
|
|
Rails/RootPublicPath:
|
|
Description: "Favor `Rails.public_path` over `Rails.root` with `'public'`."
|
|
Enabled: pending
|
|
VersionAdded: '2.15'
|
|
|
|
Rails/SafeNavigation:
|
|
Description: "Use Ruby's safe navigation operator (`&.`) instead of `try!`."
|
|
Enabled: true
|
|
VersionAdded: '0.43'
|
|
# This will convert usages of `try` to use safe navigation as well as `try!`.
|
|
# `try` and `try!` work slightly differently. `try!` and safe navigation will
|
|
# both raise a `NoMethodError` if the receiver of the method call does not
|
|
# implement the intended method. `try` will not raise an exception for this.
|
|
ConvertTry: false
|
|
|
|
Rails/SafeNavigationWithBlank:
|
|
Description: 'Avoid `foo&.blank?` in conditionals.'
|
|
Enabled: true
|
|
VersionAdded: '2.4'
|
|
# While the safe navigation operator is generally a good idea, when
|
|
# checking `foo&.blank?` in a conditional, `foo` being `nil` will actually
|
|
# do the opposite of what the author intends.
|
|
#
|
|
# foo&.blank? #=> nil
|
|
# foo.blank? #=> true
|
|
SafeAutoCorrect: false
|
|
|
|
Rails/SaveBang:
|
|
Description: 'Identifies possible cases where Active Record save! or related should be used.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#save-bang'
|
|
Enabled: false
|
|
VersionAdded: '0.42'
|
|
VersionChanged: '0.59'
|
|
AllowImplicitReturn: true
|
|
AllowedReceivers: []
|
|
SafeAutoCorrect: false
|
|
|
|
Rails/SchemaComment:
|
|
Description: >-
|
|
Enforces the use of the `comment` option when adding a new table or column
|
|
to the database during a migration.
|
|
Enabled: false
|
|
VersionAdded: '2.13'
|
|
|
|
Rails/ScopeArgs:
|
|
Description: 'Checks the arguments of ActiveRecord scopes.'
|
|
Enabled: true
|
|
VersionAdded: '0.19'
|
|
VersionChanged: '2.12'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/SelectMap:
|
|
Description: 'Checks for uses of `select(:column_name)` with `map(&:column_name)`.'
|
|
Enabled: pending
|
|
Safe: false
|
|
VersionAdded: '2.21'
|
|
|
|
Rails/ShortI18n:
|
|
Description: 'Use the short form of the I18n methods: `t` instead of `translate` and `l` instead of `localize`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#short-i18n'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.7'
|
|
EnforcedStyle: conservative
|
|
SupportedStyles:
|
|
- conservative
|
|
- aggressive
|
|
|
|
Rails/SkipsModelValidations:
|
|
Description: >-
|
|
Use methods that skips model validations with caution.
|
|
See reference for more information.
|
|
Reference: 'https://guides.rubyonrails.org/active_record_validations.html#skipping-validations'
|
|
Enabled: true
|
|
Safe: false
|
|
VersionAdded: '0.47'
|
|
VersionChanged: '2.25'
|
|
ForbiddenMethods:
|
|
- decrement!
|
|
- decrement_counter
|
|
- increment!
|
|
- increment_counter
|
|
- insert
|
|
- insert!
|
|
- insert_all
|
|
- insert_all!
|
|
- toggle!
|
|
- touch
|
|
- touch_all
|
|
- update_all
|
|
- update_attribute
|
|
- update_column
|
|
- update_columns
|
|
- update_counters
|
|
- upsert
|
|
- upsert_all
|
|
AllowedMethods: []
|
|
|
|
Rails/SquishedSQLHeredocs:
|
|
Description: 'Checks SQL heredocs to use `.squish`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#squished-heredocs'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.8'
|
|
VersionChanged: '2.9'
|
|
# Some SQL syntax (e.g. PostgreSQL comments and functions) requires newlines
|
|
# to be preserved in order to work, thus autocorrection is not safe.
|
|
SafeAutoCorrect: false
|
|
|
|
Rails/StripHeredoc:
|
|
Description: 'Enforces the use of squiggly heredoc over `strip_heredoc`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#prefer-squiggly-heredoc'
|
|
Enabled: pending
|
|
VersionAdded: '2.15'
|
|
|
|
Rails/StrongParametersExpect:
|
|
Description: 'Enforces the use of `ActionController::Parameters#expect` as a method for strong parameter handling.'
|
|
Reference: 'https://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-expect'
|
|
Enabled: pending
|
|
Include:
|
|
- '**/app/controllers/**/*.rb'
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.29'
|
|
|
|
Rails/TableNameAssignment:
|
|
Description: >-
|
|
Do not use `self.table_name =`. Use Inflections or `table_name_prefix` instead.
|
|
StyleGuide: 'https://rails.rubystyle.guide/#keep-ar-defaults'
|
|
Enabled: false
|
|
VersionAdded: '2.14'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/ThreeStateBooleanColumn:
|
|
Description: 'Add a default value and a `NOT NULL` constraint to boolean columns.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#three-state-boolean'
|
|
Enabled: pending
|
|
VersionAdded: '2.19'
|
|
Include:
|
|
- db/**/*.rb
|
|
|
|
Rails/TimeZone:
|
|
Description: 'Checks the correct usage of time zone aware methods.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#time'
|
|
Reference: 'https://danilenko.org/2012/7/6/rails_timezones'
|
|
Enabled: true
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '0.30'
|
|
VersionChanged: '2.13'
|
|
# The value `strict` means that `Time` should be used with `zone`.
|
|
# The value `flexible` allows usage of `in_time_zone` instead of `zone`.
|
|
EnforcedStyle: flexible
|
|
SupportedStyles:
|
|
- strict
|
|
- flexible
|
|
Exclude:
|
|
- '**/*.gemspec'
|
|
|
|
Rails/TimeZoneAssignment:
|
|
Description: 'Prefer the usage of `Time.use_zone` instead of manually updating `Time.zone` value.'
|
|
Reference: 'https://thoughtbot.com/blog/its-about-time-zones'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.10'
|
|
Include:
|
|
- spec/**/*.rb
|
|
- test/**/*.rb
|
|
|
|
Rails/ToFormattedS:
|
|
Description: 'Checks for consistent uses of `to_fs` or `to_formatted_s`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#prefer-to-fs'
|
|
Enabled: pending
|
|
EnforcedStyle: to_fs
|
|
SupportedStyles:
|
|
- to_fs
|
|
- to_formatted_s
|
|
VersionAdded: '2.15'
|
|
|
|
Rails/ToSWithArgument:
|
|
Description: 'Identifies passing any argument to `#to_s`.'
|
|
Enabled: pending
|
|
Safe: false
|
|
VersionAdded: '2.16'
|
|
|
|
Rails/TopLevelHashWithIndifferentAccess:
|
|
Description: 'Identifies top-level `HashWithIndifferentAccess`.'
|
|
Reference: 'https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#top-level-hashwithindifferentaccess-is-soft-deprecated'
|
|
Enabled: pending
|
|
Severity: warning
|
|
VersionAdded: '2.16'
|
|
VersionChanged: '2.18'
|
|
|
|
Rails/TransactionExitStatement:
|
|
Description: 'Avoid the usage of `return`, `break` and `throw` in transaction blocks.'
|
|
Reference:
|
|
- https://github.com/rails/rails/commit/15aa4200e083
|
|
Enabled: pending
|
|
VersionAdded: '2.14'
|
|
TransactionMethods: []
|
|
|
|
Rails/UniqBeforePluck:
|
|
Description: 'Prefer the use of uniq or distinct before pluck.'
|
|
Enabled: true
|
|
VersionAdded: '0.40'
|
|
VersionChanged: '2.13'
|
|
EnforcedStyle: conservative
|
|
SupportedStyles:
|
|
- conservative
|
|
- aggressive
|
|
SafeAutoCorrect: false
|
|
|
|
Rails/UniqueValidationWithoutIndex:
|
|
Description: 'Uniqueness validation should have a unique index on the database column.'
|
|
Enabled: true
|
|
VersionAdded: '2.5'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/UnknownEnv:
|
|
Description: 'Use correct environment name.'
|
|
Enabled: true
|
|
Severity: warning
|
|
VersionAdded: '0.51'
|
|
VersionChanged: '2.18'
|
|
Environments:
|
|
- development
|
|
- test
|
|
- production
|
|
|
|
Rails/UnusedIgnoredColumns:
|
|
Description: 'Remove a column that does not exist from `ignored_columns`.'
|
|
Enabled: false
|
|
VersionAdded: '2.11'
|
|
VersionChanged: '2.25'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/UnusedRenderContent:
|
|
Description: 'Do not specify body content for a response with a non-content status code.'
|
|
Enabled: pending
|
|
Severity: warning
|
|
VersionAdded: '2.21'
|
|
|
|
Rails/Validation:
|
|
Description: 'Use validates :attribute, hash of validations.'
|
|
Enabled: true
|
|
VersionAdded: '0.9'
|
|
VersionChanged: '0.41'
|
|
Include:
|
|
- '**/app/models/**/*.rb'
|
|
|
|
Rails/WhereEquals:
|
|
Description: 'Pass conditions to `where` and `where.not` as a hash instead of manually constructing SQL.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#hash-conditions'
|
|
Enabled: 'pending'
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.9'
|
|
VersionChanged: '2.26'
|
|
|
|
Rails/WhereExists:
|
|
Description: 'Prefer `exists?(...)` over `where(...).exists?`.'
|
|
Enabled: 'pending'
|
|
SafeAutoCorrect: false
|
|
EnforcedStyle: exists
|
|
SupportedStyles:
|
|
- exists
|
|
- where
|
|
VersionAdded: '2.7'
|
|
VersionChanged: '2.10'
|
|
|
|
Rails/WhereMissing:
|
|
Description: 'Use `where.missing(...)` to find missing relationship records.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#finding-missing-relationship-records'
|
|
Enabled: pending
|
|
VersionAdded: '2.16'
|
|
|
|
Rails/WhereNot:
|
|
Description: 'Use `where.not(...)` instead of manually constructing negated SQL in `where`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#hash-conditions'
|
|
Enabled: 'pending'
|
|
VersionAdded: '2.8'
|
|
|
|
Rails/WhereNotWithMultipleConditions:
|
|
Description: 'Do not use `where.not(...)` with multiple conditions.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#where-not-with-multiple-attributes'
|
|
Enabled: 'pending'
|
|
Severity: warning
|
|
VersionAdded: '2.17'
|
|
VersionChanged: '2.18'
|
|
|
|
Rails/WhereRange:
|
|
Description: 'Use ranges in `where` instead of manually constructing SQL.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#where-ranges'
|
|
Enabled: pending
|
|
SafeAutoCorrect: false
|
|
VersionAdded: '2.25'
|
|
|
|
# Accept `redirect_to(...) and return` and similar cases.
|
|
Style/AndOr:
|
|
EnforcedStyle: conditionals
|
|
|
|
Style/CollectionCompact:
|
|
AllowedReceivers:
|
|
- params
|
|
|
|
Style/FormatStringToken:
|
|
AllowedMethods:
|
|
- redirect
|
|
|
|
Style/InvertibleUnlessCondition:
|
|
InverseMethods:
|
|
# Active Support defines some common inverse methods. They are listed below:
|
|
:present?: :blank?
|
|
:blank?: :present?
|
|
:include?: :exclude?
|
|
:exclude?: :include?
|
|
|
|
Style/SymbolProc:
|
|
AllowedMethods:
|
|
- define_method
|
|
- mail
|
|
- respond_to
|