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