class RuboCop::Cop::Rails::ThreeStateBooleanColumn


t.boolean :active, default: true, null: false
t.column :active, :boolean, default: true, null: false
add_column :users, :active, :boolean, default: true, null: false
# good
t.boolean :active
t.column :active, :boolean
add_column :users, :active, :boolean
# bad
@example
`NOT NULL` constraint.
Enforces that boolean columns are created with default values (‘false` or `true`) and

def on_send(node)

def on_send(node)
  three_state_boolean?(node) do |column_node, options_node|
    options_node = options_node.first
    return if required_options?(options_node)
    def_node = node.each_ancestor(:def, :defs).first
    table_node = table_node(node)
    return if def_node && (table_node.nil? || change_column_null?(def_node, table_node, column_node))
    add_offense(node)
  end
end

def table_node(node)

def table_node(node)
  case node.method_name
  when :add_column
    node.first_argument
  when :column, :boolean
    ancestor = node.each_ancestor(:block).find do |n|
      n.method?(:create_table) || n.method?(:change_table)
    end
    ancestor&.send_node&.first_argument
  end
end