class RuboCop::Cop::Rails::DangerousColumnNames

rubocop:disable Metrics/ClassLength
add_column :users, :saved
# good
add_column :users, :save
# bad
@example
Some column names are considered dangerous because they would overwrite methods already defined.
Avoid dangerous column names.

def column_name_node_from(node)

def column_name_node_from(node)
  case node.method_name
  when :add_column, :rename
    node.arguments[1]
  when :rename_column
    node.arguments[2]
  when *COLUMN_TYPE_METHOD_NAMES
    node.first_argument
  end
end

def dangerous_column_name?(column_name)

def dangerous_column_name?(column_name)
  DANGEROUS_COLUMN_NAMES.include?(column_name)
end

def dangerous_column_name_node?(node)

def dangerous_column_name_node?(node)
  return false unless node.respond_to?(:value)
  dangerous_column_name?(node.value.to_s)
end

def on_send(node)

def on_send(node)
  column_name_node = column_name_node_from(node)
  return false unless column_name_node
  return false unless dangerous_column_name_node?(column_name_node)
  add_offense(column_name_node)
end