module PryState::Printer

def stringified_val_or_nil value, color, length

def stringified_val_or_nil value, color, length
  value = stringify_value value
  if value.empty?
    Pry::Helpers::Text.red 'nil'
  else
    text = truncate(value, length)
    Pry::Helpers::Text.send(color, text)
  end
end

def stringify_value value

def stringify_value value
  if value.class == String
    "\"#{value}\""
  elsif value.class == Array
    "len:#{value.count} #{value.inspect}"
  else
    value.inspect
  end
end

def trunc_and_print var, value, var_color, value_color

def trunc_and_print var, value, var_color, value_color
  var_name_adjusted = var.to_s.ljust(LEFT_COLUMN_WIDTH)
  # Ensure at least 1 space between left and right columns
  left_column_text = truncate(var_name_adjusted, LEFT_COLUMN_WIDTH - 1) + ' '
  print Pry::Helpers::Text.send(var_color, left_column_text)
  print stringified_val_or_nil(value, value_color, WIDTH - LEFT_COLUMN_WIDTH)
  print "\n"
end

def truncate text, length

def truncate text, length
  if text.nil? then return end
  return text unless ENV['TRUNCATE']
  l = length - "...".length
  (text.chars.to_a.size > length ? text.chars.to_a[0...l].join + "..." : text).to_s
end