class RuboCop::Cop::Rails::EnumUniqueness

This cop looks for duplicate values in enum declarations.

@example

# bad
enum status: { active: 0, archived: 0 }

# good
enum status: { active: 0, archived: 1 }

# bad
enum status: [:active, :archived, :active]

# good
enum status: [:active, :archived]

Constants

MSG
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/rails/enum_uniqueness.rb, line 35
def on_send(node)
  enum?(node) do |pairs|
    pairs.each do |pair|
      enum_values(pair) do |key, args|
        items = args.values

        next unless duplicates?(items)

        consecutive_duplicates(items).each do |item|
          add_offense(item, message: format(
            MSG, value: item.source, enum: enum_name(key)
          ))
        end
      end
    end
  end
end

Private Instance Methods

enum_name(key) click to toggle source
# File lib/rubocop/cop/rails/enum_uniqueness.rb, line 55
def enum_name(key)
  case key.type
  when :sym, :str
    key.value
  else
    key.source
  end
end