class Railroader::CheckDivideByZero

Public Instance Methods

check_division(result) click to toggle source
# File lib/railroader/checks/check_divide_by_zero.rb, line 14
def check_division result
  return unless original? result

  call = result[:call]

  denominator = call.first_arg

  if number? denominator and denominator.value == 0
    numerator = call.target

    if number? numerator
      if numerator.value.is_a? Float
        return # 0.0 / 0 is NaN and 1.0 / 0 is Infinity
      else
        confidence = :medium
      end
    else
      confidence = :weak
    end

    warn :result => result,
      :warning_type => "Divide by Zero",
      :warning_code => :divide_by_zero,
      :message => "Potential division by zero",
      :confidence => confidence,
      :user_input => denominator
  end
end
run_check() click to toggle source
# File lib/railroader/checks/check_divide_by_zero.rb, line 8
def run_check
  tracker.find_call(:method => :"/").each do |result|
    check_division result
  end
end