class Hanami::Events::CloudPubsub::ThreadInspector

Generate prettier backtraces for inspection

Attributes

backtrace[R]
thread[R]

Public Class Methods

new(thread) click to toggle source
# File lib/hanami/events/cloud_pubsub/thread_inspector.rb, line 10
def initialize(thread)
  @thread = thread
  @backtrace = thread.backtrace
end

Public Instance Methods

inspect() click to toggle source
# File lib/hanami/events/cloud_pubsub/thread_inspector.rb, line 19
def inspect
  thread.inspect
end
to_s() click to toggle source
# File lib/hanami/events/cloud_pubsub/thread_inspector.rb, line 15
def to_s
  "║ #{thread.inspect}\n" + pretty_backtrace
end

Private Instance Methods

colorize(text, color_code) click to toggle source
# File lib/hanami/events/cloud_pubsub/thread_inspector.rb, line 40
def colorize(text, color_code)
  "\e[#{color_code}m#{text}\e[0m"
end
join_backtrace(pretty_backtrace) click to toggle source
# File lib/hanami/events/cloud_pubsub/thread_inspector.rb, line 50
def join_backtrace(pretty_backtrace)
  pretty_backtrace.map! { |line| "║\t#{line}" }
  pretty_backtrace << '║'
  pretty_backtrace.join("\n")
end
pretty_backtrace() click to toggle source
# File lib/hanami/events/cloud_pubsub/thread_inspector.rb, line 25
def pretty_backtrace
  pretty_backtrace = backtrace.map do |call|
    parts = call.match(/^(?<file>.+):(?<line>\d+):in `(?<code>.*)'$/)

    if parts
      file = parts[:file].sub(/^#{Regexp.escape(File.join(Dir.getwd, ''))}/, '')
      pretty_line(file, parts)
    else
      colorize(call, 31)
    end
  end

  join_backtrace(pretty_backtrace)
end
pretty_line(file, parts) click to toggle source
# File lib/hanami/events/cloud_pubsub/thread_inspector.rb, line 44
def pretty_line(file, parts)
  "#{colorize(file, 36)} #{colorize('(', 37)}" \
    "#{colorize(parts[:line], 32)}#{colorize('): ', 37)} " \
    "#{colorize(parts[:code], 31)}"
end