Class: ActionMCP::ResourceTemplatesRegistry

Inherits:
RegistryBase show all
Defined in:
lib/action_mcp/resource_templates_registry.rb

Overview

Registry for managing resource templates.

Class Method Summary collapse

Methods inherited from RegistryBase

clear!, find, items, non_abstract, re_register, register, size, unregister

Class Method Details

.extract_parameters(uri, template) ⇒ Object

Extract parameter values from a URI based on a template



61
62
63
64
65
66
67
68
# File 'lib/action_mcp/resource_templates_registry.rb', line 61

def extract_parameters(uri, template)
  extracted = compiled_template(template.uri_template).extract(uri)
  extracted ? extracted.transform_keys(&:to_sym) : {}
rescue Addressable::URI::InvalidURIError,
       Addressable::Template::InvalidTemplateValueError,
       Addressable::Template::InvalidTemplateOperatorError
  {}
end

.find_template_for_uri(uri, templates: resource_templates.values) ⇒ Object

Find the most specific template for a given URI. Uses registry-backed source (not ResourceTemplate.registered_templates class array).



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/action_mcp/resource_templates_registry.rb', line 29

def find_template_for_uri(uri, templates: resource_templates.values)
  matching_templates = templates.select do |template|
    next unless template.uri_template

    compiled_template(template.uri_template).extract(uri)
  rescue Addressable::URI::InvalidURIError,
         Addressable::Template::InvalidTemplateValueError,
         Addressable::Template::InvalidTemplateOperatorError
    false
  end

  # If multiple templates match, select the most specific one
  # (the one with the most static segments)
  if matching_templates.size > 1
    matching_templates.max_by do |template|
      template_specificity(template.uri_template)
    end
  elsif matching_templates.size == 1
    matching_templates.first
  end
end

.get_resource_template(template_name) ⇒ ActionMCP::ResourceTemplate

Retrieves a resource template by name.

Parameters:

  • template_name (String)

    The name of the resource template to retrieve.

Returns:

Raises:



19
20
21
# File 'lib/action_mcp/resource_templates_registry.rb', line 19

def get_resource_template(template_name)
  find(template_name)
end

.item_klassObject



23
24
25
# File 'lib/action_mcp/resource_templates_registry.rb', line 23

def item_klass
  ResourceTemplate
end

.uri_matches_template?(uri, template) ⇒ Boolean

Check if a URI matches a specific template

Returns:

  • (Boolean)


52
53
54
55
56
57
58
# File 'lib/action_mcp/resource_templates_registry.rb', line 52

def uri_matches_template?(uri, template)
  !compiled_template(template.uri_template).extract(uri).nil?
rescue Addressable::URI::InvalidURIError,
       Addressable::Template::InvalidTemplateValueError,
       Addressable::Template::InvalidTemplateOperatorError
  false
end