class RuboCop::Cop::Rails::EnumUniqueness

enum status: [:active, :archived]
# good
enum status: [:active, :archived, :active]
# bad
enum status: { active: 0, archived: 1 }
# good
enum status: { active: 0, archived: 0 }
# bad
enum :status, [:active, :archived]
# good
enum :status, [:active, :archived, :active]
# bad
enum :status, { active: 0, archived: 1 }
# good
enum :status, { active: 0, archived: 0 }
# bad
@example
Looks for duplicate values in enum declarations.

def enum_name(key)

def enum_name(key)
  case key.type
  when :sym, :str
    key.value
  else
    key.source
  end
end

def message(key, item)

def message(key, item)
  format(MSG, value: item.source, enum: enum_name(key))
end

def on_send(node)

def on_send(node)
  enum?(node) do |key, args|
    consecutive_duplicates(args.values).each do |item|
      add_offense(item, message: message(key, item))
    end
  end
  enum_with_old_syntax?(node) do |pairs|
    pairs.each do |pair|
      enum_values(pair) do |key, args|
        consecutive_duplicates(args.values).each do |item|
          add_offense(item, message: message(key, item))
        end
      end
    end
  end
end