Class: SimpleCovMcp::ErrorHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/simplecov_mcp/error_handler.rb

Overview

Handles error reporting and logging with configurable behavior

Constant Summary collapse

VALID_ERROR_MODES =
[:off, :log, :debug].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(error_mode: :log, logger: nil) ⇒ ErrorHandler

Returns a new instance of ErrorHandler.



14
15
16
17
18
19
20
21
# File 'lib/simplecov_mcp/error_handler.rb', line 14

def initialize(error_mode: :log, logger: nil)
  unless VALID_ERROR_MODES.include?(error_mode)
    raise ArgumentError, "Invalid error_mode: #{error_mode.inspect}. Valid modes: #{VALID_ERROR_MODES.inspect}"
  end

  @error_mode = error_mode
  @logger = logger
end

Instance Attribute Details

#error_modeObject

Returns the value of attribute error_mode.



10
11
12
# File 'lib/simplecov_mcp/error_handler.rb', line 10

def error_mode
  @error_mode
end

#loggerObject

Returns the value of attribute logger.



10
11
12
# File 'lib/simplecov_mcp/error_handler.rb', line 10

def logger
  @logger
end

Instance Method Details

#convert_standard_error(error, context: :general) ⇒ Object

Convert standard Ruby errors to user-friendly custom errors.

Parameters:

  • error (Exception)

    the error to convert

  • context (Symbol) (defaults to: :general)

    :general (default) or :coverage_loading for context-specific messages



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/simplecov_mcp/error_handler.rb', line 42

def convert_standard_error(error, context: :general)
  case error
  when Errno::ENOENT
    convert_enoent(error, context)
  when Errno::EACCES
    convert_eacces(error, context)
  when Errno::EISDIR
    filename = extract_filename(error.message)
    NotAFileError.new("Expected file but found directory: #{filename}", error)
  when JSON::ParserError
    CoverageDataError.new("Invalid coverage data format: #{error.message}", error)
  when TypeError
    CoverageDataError.new("Invalid coverage data structure: #{error.message}", error)
  when ArgumentError
    convert_argument_error(error, context)
  when NoMethodError
    convert_no_method_error(error, context)
  when RuntimeError
    convert_runtime_error(error, context)
  else
    Error.new("An unexpected error occurred: #{error.message}", error)
  end
end

#handle_error(error, context: nil, reraise: true) ⇒ Object

Handle an error with appropriate logging and re-raising behavior



32
33
34
35
36
37
# File 'lib/simplecov_mcp/error_handler.rb', line 32

def handle_error(error, context: nil, reraise: true)
  log_error(error, context)
  if reraise
    raise error.is_a?(SimpleCovMcp::Error) ? error : convert_standard_error(error)
  end
end

#log_errors?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/simplecov_mcp/error_handler.rb', line 23

def log_errors?
  error_mode != :off
end

#show_stack_traces?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/simplecov_mcp/error_handler.rb', line 27

def show_stack_traces?
  error_mode == :debug
end