# Default enabled cops
# https://github.com/rubocop-hq/rubocop/blob/master/config/default.yml

inherit_from: .rubocop_todo.yml

AllCops:
  DisplayCopNames: true
  Exclude:
    - 'bin/rails'
    - 'bin/rake'
    - 'bin/spring'
    - 'db/schema.rb'
    - 'vendor/**/*'

Rails:
  Enabled: true

# Zammad StyleGuide

Style/FrozenStringLiteralComment:
  Enabled: false

Metrics/LineLength:
  Description: 'Limit lines to 80 characters.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#80-character-limits'
  Enabled: false

Style/NegatedIf:
  Description: >-
                 Favor unless over if for negative conditions
                 (or control flow or).
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#unless-for-negatives'
  Enabled: false

Style/IfUnlessModifier:
  Description: >-
                 Favor modifier if/unless usage when you have a
                 single-line body.
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier'
  Enabled: false

Style/TrailingCommaInArrayLiteral:
  Description: 'Checks for trailing comma in array literals.'
  StyleGuide: '#no-trailing-array-commas'
  Enabled: false

Style/TrailingCommaInHashLiteral:
  Description: 'Checks for trailing comma in hash literals.'
  Enabled: false

Style/TrailingCommaInArguments:
  Description: 'Checks for trailing comma in argument lists.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
  Enabled: false

Layout/SpaceInsideParens:
  Description: 'No spaces after ( or before ).'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-spaces-braces'
  Enabled: false

Layout/SpaceAfterMethodName:
  Description: >-
                 Do not put a space between a method name and the opening
                 parenthesis in a method definition.
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#parens-no-spaces'
  Enabled: false

Layout/LeadingCommentSpace:
  Description: 'Comments should start with a space.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#hash-space'
  Enabled: false

Style/MethodCallWithoutArgsParentheses:
  Description: 'Do not use parentheses for method calls with no arguments.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-args-no-parens'
  Enabled: false

Layout/SpaceInsideReferenceBrackets:
  Description: 'Checks the spacing inside referential brackets.'
  Enabled: false

Layout/SpaceInsideArrayLiteralBrackets:
  Description: 'Checks the spacing inside array literal brackets.'
  Enabled: false

Style/DefWithParentheses:
  Description: 'Use def with parentheses when there are arguments.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#method-parens'
  Enabled: false
Style/MethodDefParentheses:
  Description: >-
                 Checks if the method definitions have or don't have
                 parentheses.
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#method-parens'
  Enabled: false

Layout/AlignHash:
  Description: >-
                 Align the elements of a hash literal if they span more than
                 one line.
  Enabled: true
  EnforcedHashRocketStyle: table
  EnforcedColonStyle: table
  EnforcedLastArgumentHashStyle: always_inspect

Layout/EmptyLinesAroundClassBody:
  Description: "Keeps track of empty lines around class bodies."
  Enabled: false

Layout/EmptyLinesAroundMethodBody:
  Description: "Keeps track of empty lines around method bodies."
  Enabled: false

Layout/EmptyLinesAroundBlockBody:
  Description: "Keeps track of empty lines around block bodies."
  Enabled: false

Layout/EmptyLinesAroundModuleBody:
  Description: "Keeps track of empty lines around module bodies."
  Enabled: false

Style/MultilineBlockChain:
  Description: 'Avoid multi-line chains of blocks.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#single-line-blocks'
  Enabled: false

Metrics/ClassLength:
  Description: 'Avoid classes longer than 100 lines of code.'
  Enabled: false

Metrics/MethodLength:
  Description: 'Avoid methods longer than 10 lines of code.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#short-methods'
  Enabled: false

Style/BlockComments:
  Description: 'Do not use block comments.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-block-comments'
  Enabled: false

Style/PerlBackrefs:
  Description: 'Avoid Perl-style regex back references.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-perl-regexp-last-matchers'
  Enabled: false

Style/SelfAssignment:
  Description: >-
                 Checks for places where self-assignment shorthand should have
                 been used.
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#self-assignment'
  Enabled: false

Style/BracesAroundHashParameters:
  Description: 'Enforce braces style around hash parameters.'
  Enabled: false

Rails/BulkChangeTable:
  Description: 'Check whether alter queries are combinable.'
  Enabled: false

Rails/FindEach:
  Description: 'Prefer all.find_each over all.find.'
  Enabled: false

Rails/HasAndBelongsToMany:
  Description: 'Prefer has_many :through to has_and_belongs_to_many.'
#  StyleGuide: 'https://github.com/bbatsov/rails-style-guide#has-many-through'
  Enabled: false

Rails/SkipsModelValidations:
  Description: >-
                 Use methods that skips model validations with caution.
                 See reference for more information.
  Reference: 'http://guides.rubyonrails.org/active_record_validations.html#skipping-validations'
  Enabled: true
  Exclude:
    - test/**/*

Style/ClassAndModuleChildren:
  Description: 'Checks style of children classes and modules.'
  Enabled: false

Naming/FileName:
  Description: 'Use snake_case for source file names.'
  StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#snake-case-files'
  Enabled: true
  Exclude:
    - 'script/websocket-server.rb'

Naming/VariableNumber:
  Description: 'Use the configured style when numbering variables.'
  Enabled: false

Naming/UncommunicativeMethodParamName:
  Description: >-
                Checks for method parameter names that contain capital letters,
                end in numbers, or do not meet a minimal length.
  Enabled: true
  AllowedNames: e, id, _, ip

Lint/BooleanSymbol:
  Description: 'Check for `:true` and `:false` symbols.'
  Enabled: true
  Exclude:
    - "db/seeds/object_manager_attributes.rb"
    - "spec/requests/integration/object_manager_attributes_spec.rb"
    - "test/integration/object_manager_test.rb"

Lint/InterpolationCheck:
  Description: 'Raise warning for interpolation in single q strs'
  Enabled: true
  Exclude:
    - "test/unit/email_process_auto_response_test.rb"
    - "test/unit/email_process_bounce_delivery_permanent_failed_test.rb"
    - "test/unit/email_process_bounce_follow_test.rb"
    - "test/unit/notification_factory_renderer_test.rb"
    - "test/unit/notification_factory_template_test.rb"
    - "test/unit/ticket_trigger_test.rb"
    - "test/unit/ticket_trigger_recursive_disabled_test.rb"

# RSpec tests
Style/NumericPredicate:
  Description: >-
                 Checks for the use of predicate- or comparison methods for
                 numeric comparisons.
  StyleGuide: '#predicate-methods'
  # This will change to a new method call which isn't guaranteed to be on the
  # object. Switching these methods has to be done with knowledge of the types
  # of the variables which rubocop doesn't have.
  AutoCorrect: false
  Enabled: true
  Exclude:
    - "**/*_spec.rb"

Lint/AmbiguousBlockAssociation:
  Description: >-
                 Checks for ambiguous block association with method when param passed without
                 parentheses.
  StyleGuide: '#syntax'
  Enabled: true
  Exclude:
    - "spec/support/*.rb"
    - "**/*_spec.rb"
    - "**/*_examples.rb"

# Special exceptions

Style/HashSyntax:
  Exclude:
    - "**/*.rake"
