Class: Sentry::StacktraceInterface::Frame

Inherits:
Interface
  • Object
show all
Defined in:
lib/sentry/interfaces/stacktrace.rb

Overview

Not actually an interface, but I want to use the same style

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project_root, line, strip_backtrace_load_path = true) ⇒ Frame

Returns a new instance of Frame.



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/sentry/interfaces/stacktrace.rb', line 30

def initialize(project_root, line, strip_backtrace_load_path = true)
  @project_root = project_root
  @strip_backtrace_load_path = strip_backtrace_load_path

  @abs_path = line.file
  @function = line.method if line.method
  @lineno = line.number
  @in_app = line.in_app
  @module = line.module_name if line.module_name
  @filename = compute_filename
end

Instance Attribute Details

#abs_pathObject

Returns the value of attribute abs_path.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def abs_path
  @abs_path
end

#context_lineObject

Returns the value of attribute context_line.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def context_line
  @context_line
end

#filenameObject

Returns the value of attribute filename.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def filename
  @filename
end

#functionObject

Returns the value of attribute function.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def function
  @function
end

#in_appObject

Returns the value of attribute in_app.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def in_app
  @in_app
end

#linenoObject

Returns the value of attribute lineno.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def lineno
  @lineno
end

#moduleObject

Returns the value of attribute module.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def module
  @module
end

#post_contextObject

Returns the value of attribute post_context.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def post_context
  @post_context
end

#pre_contextObject

Returns the value of attribute pre_context.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def pre_context
  @pre_context
end

#varsObject

Returns the value of attribute vars.



27
28
29
# File 'lib/sentry/interfaces/stacktrace.rb', line 27

def vars
  @vars
end

Instance Method Details

#compute_filenameObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/sentry/interfaces/stacktrace.rb', line 46

def compute_filename
  return if abs_path.nil?
  return abs_path unless @strip_backtrace_load_path

  prefix =
    if under_project_root? && in_app
      @project_root
    elsif under_project_root?
      longest_load_path || @project_root
    else
      longest_load_path
    end

  prefix ? abs_path[prefix.to_s.chomp(File::SEPARATOR).length + 1..-1] : abs_path
end

#set_context(linecache, context_lines) ⇒ Object



62
63
64
65
66
67
# File 'lib/sentry/interfaces/stacktrace.rb', line 62

def set_context(linecache, context_lines)
  return unless abs_path

  @pre_context, @context_line, @post_context = \
      linecache.get_file_context(abs_path, lineno, context_lines)
end

#to_hash(*args) ⇒ Object



69
70
71
72
73
74
75
76
# File 'lib/sentry/interfaces/stacktrace.rb', line 69

def to_hash(*args)
  data = super(*args)
  data.delete(:vars) unless vars && !vars.empty?
  data.delete(:pre_context) unless pre_context && !pre_context.empty?
  data.delete(:post_context) unless post_context && !post_context.empty?
  data.delete(:context_line) unless context_line && !context_line.empty?
  data
end

#to_sObject



42
43
44
# File 'lib/sentry/interfaces/stacktrace.rb', line 42

def to_s
  "#{@filename}:#{@lineno}"
end