require: 
  - rubocop-rspec
  - rubocop-performance
  - rubocop-rails

AllCops:
  Exclude:
    - bin/*
    - config.ru
    - config/application.rb
    - config/boot.rb
    - config/environment.rb
    - config/environments/development.rb
    - config/environments/production.rb
    - config/environments/test.rb
    - config/initializers/airbrake.rb
    - config/initializers/application_controller_renderer.rb
    - config/initializers/backtrace_silencers.rb
    - config/initializers/cookies_serializer.rb
    - config/initializers/filter_parameter_logging.rb
    - config/initializers/inflections.rb
    - config/initializers/mime_types.rb
    - config/initializers/wrap_parameters.rb
    - config/puma.rb
    - config/spring.rb
    - db/schema.rb
    - db/seeds/**/*
    - Gemfile.lock
    - Rakefile
    - script/rails

Gemspec/RequiredRubyVersion:
  Description: "https://docs.rubocop.org/rubocop/1.31/cops_gemspec.html#gemspecrequiredrubyversion"
  Enabled: false

Lint/AmbiguousAssignment:
  Description: Checks for mistyped shorthand assignments.
  Enabled: false

Lint/AmbiguousOperator:
  Description: Checks for ambiguous operators in the first argument of a method invocation without parentheses.
  Enabled: false

Lint/DisjunctiveAssignmentInConstructor:
  Description: Checks constructors for disjunctive assignments (||=) that should be plain assignments.
  Enabled: false

Lint/EmptyInPattern:
  Description: Checks for the presence of in pattern branches without a body.
  Enabled: false

Lint/NoReturnInBeginEndBlocks:
  Description: Checks for the presence of a return inside a begin..end block in assignment contexts
  Enabled: true

Lint/AmbiguousBlockAssociation:
  Description: Checks for ambiguous block association with method when param passed without parentheses.
  Enabled: true

Metrics/AbcSize:
  Description: Checks that the ABC size of methods is not higher than the configured maximum.
  Enabled: true

Metrics/ClassLength:
  Description: Avoid class longer than 250 lines
  Enabled: true
  Max: 250

Metrics/MethodLength:
  Description: Checks if the length of a method exceeds some maximum value.
  Enabled: false

Metrics/ModuleLength:
  Description: Avoid module longer than 250 lines
  Enabled: true
  Max: 250

Metrics/ParameterLists:
  Description: Checks for methods with too many parameters.
  Enabled: true
  CountKeywordArgs: true
  Max: 5

Metrics/CyclomaticComplexity:
  Description: Checks that the cyclomatic complexity of methods is not higher than the configured maximum.
  Enabled: true
  Max: 7

Naming/VariableNumber:
  Description: Makes sure that all numbered variables use the configured style, snake_case, normalcase, or non_integer, for their numbering.
  EnforcedStyle: snake_case

RSpec/EmptyExampleGroup:
  Exclude:
    - spec/factories/*

RSpec/EmptyLineAfterExampleGroup:
  Exclude:
    - spec/factories/*

RSpec/MissingExampleGroupArgument:
  Exclude:
    - spec/factories/*

Style/Documentation:
  Description: Checks for missing top-level documentation of classes and modules.
  Enabled: false

Style/Lambda:
  Description: (by default) checks for uses of the lambda literal syntax for single line lambdas, and the method call syntax for multiline lambdas.
  EnforcedStyle: literal

Style/PercentLiteralDelimiters:
  Description: Enforces the consistent usage of %-literal delimiters.
  PreferredDelimiters:
    '%i': '[]'
    '%I': '[]'
    '%r': ()
    '%w': '[]'
    '%W': '[]'

Style/PercentQLiterals:
  Description: Checks for usage of the %Q() syntax when %q() would do.
  EnforcedStyle: upper_case_q

Style/StringLiterals:
  Description: Checks if uses of quotes match the configured preference.
  EnforcedStyle: single_quotes

Style/StringLiteralsInInterpolation:
  Description: Checks that quotes inside the string interpolation match the configured preference.
  EnforcedStyle: single_quotes

Style/TrailingCommaInArrayLiteral:
  Description: Checks for trailing comma in array literals.
  EnforcedStyleForMultiline: comma

Style/TrailingCommaInHashLiteral:
  Description: Checks for trailing comma in hash literals.
  EnforcedStyleForMultiline: comma