class RuboCop::Cop::PollEverywhere::NullableBoolean

Constants

MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/polleverywhere/nullable_boolean.rb, line 9
def on_send(node)
  if adding_boolean?(node) && nullable?(node)
    add_offense(node, location: :expression, message: MSG)
  end
end
relevant_file?(file) click to toggle source
Calls superclass method
# File lib/rubocop/cop/polleverywhere/nullable_boolean.rb, line 15
def relevant_file?(file)
  super && file =~ %r(/db/migrate/.+\.rb\z)
end

Private Instance Methods

adding_boolean?(node) click to toggle source
# File lib/rubocop/cop/polleverywhere/nullable_boolean.rb, line 21
def adding_boolean?(node)
  code_match = node.method_name == :boolean ||
    node.source =~ /(add|change)_column.+boolean/mi
  code_match && !in_excluded_method?(node)
end
in_excluded_method?(node) click to toggle source
# File lib/rubocop/cop/polleverywhere/nullable_boolean.rb, line 27
def in_excluded_method?(node)
  node.each_ancestor(:def).any? do |parent_node|
    method_name, _args, _body = *parent_node
    method_name == :down
  end
end
nullable?(node) click to toggle source
# File lib/rubocop/cop/polleverywhere/nullable_boolean.rb, line 34
def nullable?(node)
  node.source !~ /(null:\s*false)|(:null\s*=>\s*false)|(NOT\s+NULL)/i
end