module HopTimer

Constants

TABLE_ELEMENTS
TIME_VALUES
TITLES
VERSION

Public Class Methods

eval(check_point1, check_point2, time_value = :string) click to toggle source
# File lib/hop_timer.rb, line 62
def self.eval(check_point1, check_point2, time_value = :string)
  time_value_validation(time_value)

  time_diff = check_point1 - check_point2

  udiff = time_diff[:u_diff]
  sdiff = time_diff[:s_diff]
  cudiff = time_diff[:cu_diff]
  csdiff = time_diff[:cs_diff]
  realdiff = time_diff[:r_diff]

  report = Benchmark::Tms.new(udiff, sdiff, cudiff, csdiff, realdiff).to_s

  values = report_to_values(report)

  log_table(values, check_point1.name, check_point2.name)

  times_to_hash(values, time_value)
end

Private Class Methods

log_and_enter(*lines) click to toggle source
# File lib/hop_timer.rb, line 128
def self.log_and_enter(*lines)
  lines.each { |line| puts line + "\n" }
end
log_table(times, name1, name2) click to toggle source
# File lib/hop_timer.rb, line 89
def self.log_table(times, name1, name2)
  max_width = (times.map(&:length).max + 2)
  title = set_title(name1, name2, max_width)

  top_divider = TABLE_ELEMENTS[:top_divider]
  top_row = TABLE_ELEMENTS[:top_row]
  mid_divider = TABLE_ELEMENTS[:mid_divider]
  bot_row = TABLE_ELEMENTS[:bot_row]
  bot_divider = TABLE_ELEMENTS[:bot_divider]

  times.each_with_index do |val, i|
    top_divider << ("-" * max_width)
    mid_divider << ("-" * max_width)
    bot_divider << ("-" * max_width)

    if i == (times.length - 1)
      top_divider << TABLE_ELEMENTS[:top_right]
      mid_divider << TABLE_ELEMENTS[:mid_right]
      bot_divider << TABLE_ELEMENTS[:bot_right]
    else
      top_divider << TABLE_ELEMENTS[:top_center]
      mid_divider << TABLE_ELEMENTS[:mid_center]
      bot_divider << TABLE_ELEMENTS[:bot_center]
    end

    top_row << TITLES[i].center(max_width) + "|"
    bot_row << val.center(max_width) + "|"
  end

  log_and_enter(title, top_divider, top_row, mid_divider, bot_row, bot_divider)
end
report_to_values(report) click to toggle source
# File lib/hop_timer.rb, line 132
def self.report_to_values(report)
  values = report.to_s.gsub(/(\(|\))/, '').split(' ')

  values[-1] = values[-1] + "(s)"

  values
end
set_title(name1, name2, width) click to toggle source
# File lib/hop_timer.rb, line 121
def self.set_title(name1, name2, width)
  message = "Runtime between #{name1} and #{name2}"
  width = (width * 4) + 5

  message.center(width, "=")
end
str_to_float(str) click to toggle source
# File lib/hop_timer.rb, line 159
def self.str_to_float(str)
  str.to_f / 1_000_000
end
time_value_validation(value_type) click to toggle source
# File lib/hop_timer.rb, line 82
def self.time_value_validation(value_type)
  error_message = "time value can be :string or :float/:number"
  new_error = ArgumentError.new(error_message)

  raise new_error unless TIME_VALUES.include?(value_type)
end
times_to_hash(times, value_type) click to toggle source
# File lib/hop_timer.rb, line 140
def self.times_to_hash(times, value_type)
  times_hash = {}

  TITLES.each_with_index do |title, i|
    val = i == (TITLES.length - 1) ? times[i][0..-4] : times[i]

    output_val = case value_type
                 when :string
                   val
                 else
                   str_to_float(val)
                 end

    times_hash[title] = output_val
  end

  times_hash
end