Class: ActionMCP::Logging::Level

Inherits:
Object
  • Object
show all
Defined in:
lib/action_mcp/logging/level.rb

Overview

RFC 5424 log levels for MCP logging

Constant Summary collapse

LEVELS =

Log levels in order of severity (ascending)

{
  debug: 0,
  info: 1,
  notice: 2,
  warning: 3,
  error: 4,
  critical: 5,
  alert: 6,
  emergency: 7
}.freeze
LEVEL_NAMES =

Reverse mapping for converting integers back to symbols

LEVELS.invert.freeze

Class Method Summary collapse

Class Method Details

.all_levelsArray<Symbol>

Get all valid level names as symbols

Returns:

  • (Array<Symbol>)

    Array of level symbols



70
71
72
# File 'lib/action_mcp/logging/level.rb', line 70

def all_levels
  LEVELS.keys
end

.coerce(level) ⇒ Integer

Coerce a level to its integer value

Parameters:

  • level (String, Symbol, Integer)

    The level to coerce

Returns:

  • (Integer)

    The integer severity value

Raises:

  • (ArgumentError)

    if level is invalid



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/action_mcp/logging/level.rb', line 42

def coerce(level)
  case level
  when String, Symbol
    symbol_level = level.to_sym
    LEVELS.fetch(symbol_level) do
      raise ArgumentError, "Invalid log level: #{level}. Valid levels: #{LEVELS.keys.join(', ')}"
    end
  when Integer
    unless LEVEL_NAMES.key?(level)
      raise ArgumentError, "Invalid log level: #{level}. Valid levels: 0-7"
    end
    level
  else
    raise ArgumentError, "Invalid log level type: #{level.class}. Expected String, Symbol, or Integer"
  end
end

.more_severe_or_equal?(level_a, level_b) ⇒ Boolean

Check if level_a is more severe than level_b

Parameters:

  • level_a (String, Symbol, Integer)

    First level

  • level_b (String, Symbol, Integer)

    Second level

Returns:

  • (Boolean)

    true if level_a >= level_b in severity



78
79
80
# File 'lib/action_mcp/logging/level.rb', line 78

def more_severe_or_equal?(level_a, level_b)
  coerce(level_a) >= coerce(level_b)
end

.name_for(level_int) ⇒ Symbol

Convert integer level back to symbol

Parameters:

  • level_int (Integer)

    The integer level

Returns:

  • (Symbol)

    The symbol name



62
63
64
65
66
# File 'lib/action_mcp/logging/level.rb', line 62

def name_for(level_int)
  LEVEL_NAMES.fetch(level_int) do
    raise ArgumentError, "Invalid log level integer: #{level_int}"
  end
end

.valid?(level) ⇒ Boolean

Check if a level is valid

Parameters:

  • level (String, Symbol, Integer)

    The level to check

Returns:

  • (Boolean)

    true if valid, false otherwise



27
28
29
30
31
32
33
34
35
36
# File 'lib/action_mcp/logging/level.rb', line 27

def valid?(level)
  case level
  when String, Symbol
    LEVELS.key?(level.to_sym)
  when Integer
    LEVEL_NAMES.key?(level)
  else
    false
  end
end