class RuboCop::Cop::Rails::NotNullColumn

add_reference :products, :category, null: false, default: 1
add_reference :products, :category
add_column :users, :name, :string, null: false, default: ”
add_column :users, :name, :string, null: true
# good
add_reference :products, :category, null: false
add_column :users, :name, :string, null: false
# bad
@example
in migration file.
This cop checks for add_column call with NOT NULL constraint

def check_add_column(node)

def check_add_column(node)
  pairs = add_not_null_column?(node)
  check_pairs(pairs)
end

def check_add_reference(node)

def check_add_reference(node)
  pairs = add_not_null_reference?(node)
  check_pairs(pairs)
end

def check_pairs(pairs)

def check_pairs(pairs)
  return unless pairs
  return if pairs.any? { |pair| has_default?(pair) }
  null_false = pairs.find { |pair| null_false?(pair) }
  return unless null_false
  add_offense(null_false, :expression)
end

def on_send(node)

def on_send(node)
  check_add_column(node)
  check_add_reference(node)
end