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