module ValidateNumberOfQueries

Public Instance Methods

validate_makes(db_queries, render_time, makes) click to toggle source
# File lib/performance_promise/validations/number_of_db_queries.rb, line 2
def validate_makes(db_queries, render_time, makes)
  makes = makes.evaluate  # force evaluation of lazy evaluated promise

  passes = (db_queries.length <= makes)
  error_message = ''
  backtrace = []

  if passes
      return passes, error_message, backtrace
  end

  guessed_order = Utils.guess_order(db_queries)
  error_message = ":makes => #{guessed_order}"
  backtrace = []
  Utils.summarize_queries(db_queries).each do |db_query, count|
    statement = "#{count} x #{db_query[:sql]}"
    backtrace << statement
    db_query[:trace].each do |trace|
      if trace.starts_with?('app')
        file, line_number = trace.split(':')
        trace = "    |_" + File.read(file).split("\n")[line_number.to_i - 1].strip + ' (' + trace + ')'
      end
      backtrace << trace
    end
  end

  return passes, error_message, backtrace
end