class Lookbook::Error

def backtrace

def backtrace
  original&.backtrace || super
end

def backtrace_lines

def backtrace_lines
  root = Rails.root.to_s
  backtrace.map { |line| line.gsub(root, "") }
end

def file_path

def file_path
  return @file_path.to_s if @file_path.present?
  parsed_backtrace[0][0] if parsed_backtrace.any?
end

def initialize(message = nil,

def initialize(message = nil,
  scope: nil, original: nil, status: nil, detail: nil,
  file_path: nil, source: nil, line_number: nil, **kwargs)
  @scope = scope
  @original = original
  @message = message
  @status = status
  @detail = detail
  @file_path = file_path
  @source = source
  @line_number = line_number
  super(message)
end

def line_number

def line_number
  return @line_number.to_i if @line_number.present?
  if parsed_backtrace.any?
    number = parsed_backtrace[0][1]
    number.to_i if number.present?
  end
end

def message

def message
  @message || original&.message
end

def parsed_backtrace

def parsed_backtrace
  backtrace.map do |line|
    line =~ /^(.+?):(\d+)(|:in `(.+)')$/
    [$1, $2, $4]
  end
end

def relative_file_path

def relative_file_path
  file_path&.delete_prefix("#{Rails.root}/")
end

def type

def type
  (original.presence || self).class.to_s
end