class RuboCop::Cop::Rails::EnumHash
enum status: { active: 0, archived: 1 }
# good
enum status: [:active, :archived]
# bad
@example
value for each key prevents this from happening.
definitions to shift. Explicitly specifying the
position other than the last causes all previous
When using array syntax, adding an element in a
Looks for enums written with array syntax.
def enum_name(key)
def enum_name(key) case key.type when :sym, :str key.value else key.source end end
def on_send(node)
def on_send(node) enum?(node) do |pairs| pairs.each do |pair| key, array = array_pair?(pair) next unless key add_offense(array, message: format(MSG, enum: enum_name(key))) do |corrector| hash = array.children.each_with_index.map do |elem, index| "#{source(elem)} => #{index}" end.join(', ') corrector.replace(array.loc.expression, "{#{hash}}") end end end end
def source(elem)
def source(elem) case elem.type when :str elem.value.dump when :sym elem.value.inspect else elem.source end end