Class: ActionMCP::ResourceTemplatesRegistry
- Inherits:
-
RegistryBase
- Object
- RegistryBase
- ActionMCP::ResourceTemplatesRegistry
- Defined in:
- lib/action_mcp/resource_templates_registry.rb
Overview
Registry for managing resource templates.
Class Method Summary collapse
-
.extract_parameters(uri, template) ⇒ Object
Extract parameter values from a URI based on a template.
-
.find_template_for_uri(uri, templates: resource_templates.values) ⇒ Object
Find the most specific template for a given URI.
-
.get_resource_template(template_name) ⇒ ActionMCP::ResourceTemplate
Retrieves a resource template by name.
- .item_klass ⇒ Object
-
.uri_matches_template?(uri, template) ⇒ Boolean
Check if a URI matches a specific template.
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.
19 20 21 |
# File 'lib/action_mcp/resource_templates_registry.rb', line 19 def get_resource_template(template_name) find(template_name) end |
.item_klass ⇒ Object
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
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 |