diff --git a/lib/mcp.rb b/lib/mcp.rb index c918f77..ac1f217 100644 --- a/lib/mcp.rb +++ b/lib/mcp.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require_relative "json_rpc_handler" +require_relative "mcp/annotations" require_relative "mcp/configuration" require_relative "mcp/content" require_relative "mcp/icon" @@ -39,13 +40,4 @@ def configuration @configuration ||= Configuration.new end end - - class Annotations - attr_reader :audience, :priority - - def initialize(audience: nil, priority: nil) - @audience = audience - @priority = priority - end - end end diff --git a/lib/mcp/annotations.rb b/lib/mcp/annotations.rb new file mode 100644 index 0000000..9674c73 --- /dev/null +++ b/lib/mcp/annotations.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module MCP + class Annotations + attr_reader :audience, :priority, :last_modified + + def initialize(audience: nil, priority: nil, last_modified: nil) + @audience = audience + @priority = priority + @last_modified = last_modified + end + + def to_h + { + audience: audience, + priority: priority, + lastModified: last_modified, + }.compact + end + end +end diff --git a/test/mcp/annotations_test.rb b/test/mcp/annotations_test.rb new file mode 100644 index 0000000..4253cd5 --- /dev/null +++ b/test/mcp/annotations_test.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +require "test_helper" + +module MCP + class AnnotationsTest < ActiveSupport::TestCase + def test_initialization + annotations = Annotations.new(audience: ["developers"], priority: 0.8) + + assert_equal(["developers"], annotations.audience) + assert_equal(0.8, annotations.priority) + assert_nil(annotations.last_modified) + + assert_equal({ audience: ["developers"], priority: 0.8 }, annotations.to_h) + end + + def test_initialization_with_all_attributes + timestamp = Time.utc(2025, 1, 12, 15, 0, 58).iso8601 + annotations = Annotations.new(audience: ["developers"], priority: 0.8, last_modified: timestamp) + + assert_equal(["developers"], annotations.audience) + assert_equal(0.8, annotations.priority) + assert_equal(timestamp, annotations.last_modified) + + assert_equal({ audience: ["developers"], priority: 0.8, lastModified: timestamp }, annotations.to_h) + end + + def test_initialization_by_default + annotations = Annotations.new + + assert_nil(annotations.audience) + assert_nil(annotations.priority) + assert_nil(annotations.last_modified) + + assert_empty(annotations.to_h) + end + + def test_initialization_with_partial_attributes + annotations = Annotations.new(audience: ["developers"]) + + assert_equal(["developers"], annotations.audience) + assert_nil(annotations.priority) + assert_nil(annotations.last_modified) + + assert_equal({ audience: ["developers"] }, annotations.to_h) + end + + def test_initialization_with_last_modified_only + timestamp = Time.utc(2025, 1, 12, 15, 0, 58).iso8601 + annotations = Annotations.new(last_modified: timestamp) + + assert_nil(annotations.audience) + assert_nil(annotations.priority) + assert_equal(timestamp, annotations.last_modified) + + assert_equal({ lastModified: timestamp }, annotations.to_h) + end + end +end