Method: GraphQL::Backtrace::TracedError#initialize

Defined in:
lib/graphql/backtrace/traced_error.rb

#initialize(err, current_ctx) ⇒ TracedError

Returns a new instance of TracedError.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/graphql/backtrace/traced_error.rb', line 28

def initialize(err, current_ctx)
  @context = current_ctx
  backtrace = Backtrace.new(current_ctx, value: err)
  @graphql_backtrace = backtrace.to_a

  cause_backtrace_preview = err.backtrace.first(CAUSE_BACKTRACE_PREVIEW_LENGTH).join("\n    ")

  cause_backtrace_remainder_length = err.backtrace.length - CAUSE_BACKTRACE_PREVIEW_LENGTH
  cause_backtrace_more = if cause_backtrace_remainder_length < 0
    ""
  elsif cause_backtrace_remainder_length == 1
    "... and 1 more line\n"
  else
    "... and #{cause_backtrace_remainder_length} more lines\n"
  end

  message = MESSAGE_TEMPLATE % {
    cause_message: err.message,
    cause_backtrace: cause_backtrace_preview,
    cause_backtrace_more: cause_backtrace_more,
    graphql_table: backtrace.inspect,
  }
  super(message)
end