Class: MCP::ResourceTemplate
- Inherits:
-
Object
- Object
- MCP::ResourceTemplate
- Defined in:
- lib/mcp/resource_template.rb
Constant Summary collapse
- NOT_SET =
Object.new
- VARIABLE_PATTERN =
Applied after
Regexp.escape, which turns{` and `}into\{and\}. Variable names are restricted to valid Regexp named-group names, so RFC 6570 operator expressions (e.g.{?query}) stay literal and never match. /\\\{([A-Za-z_]\w*)\\\}/
Class Attribute Summary collapse
-
.annotations_value ⇒ Object
readonly
Returns the value of attribute annotations_value.
-
.description_value ⇒ Object
readonly
Returns the value of attribute description_value.
-
.icons_value ⇒ Object
readonly
Returns the value of attribute icons_value.
-
.meta_value ⇒ Object
readonly
Returns the value of attribute meta_value.
-
.mime_type_value ⇒ Object
readonly
Returns the value of attribute mime_type_value.
-
.title_value ⇒ Object
readonly
Returns the value of attribute title_value.
-
.uri_template_value ⇒ Object
readonly
Returns the value of attribute uri_template_value.
Instance Attribute Summary collapse
-
#annotations ⇒ Object
readonly
Returns the value of attribute annotations.
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#icons ⇒ Object
readonly
Returns the value of attribute icons.
-
#meta ⇒ Object
readonly
Returns the value of attribute meta.
-
#mime_type ⇒ Object
readonly
Returns the value of attribute mime_type.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#title ⇒ Object
readonly
Returns the value of attribute title.
-
#uri_template ⇒ Object
readonly
Returns the value of attribute uri_template.
Class Method Summary collapse
- .annotations(value = NOT_SET) ⇒ Object
- .contents(server_context: nil, **params) ⇒ Object
- .define(uri_template: nil, name: nil, title: nil, description: nil, icons: [], mime_type: nil, annotations: nil, meta: nil, &block) ⇒ Object
- .description(value = NOT_SET) ⇒ Object
- .icons(value = NOT_SET) ⇒ Object
- .inherited(subclass) ⇒ Object
-
.match_uri(uri) ⇒ Object
Matches a concrete URI against the template's simple RFC 6570 level-1
{var}expressions. - .meta(value = NOT_SET) ⇒ Object
- .mime_type(value = NOT_SET) ⇒ Object
- .name_value ⇒ Object
- .resource_template_name(value = NOT_SET) ⇒ Object
- .title(value = NOT_SET) ⇒ Object
- .to_h ⇒ Object
- .uri_template(value = NOT_SET) ⇒ Object
Instance Method Summary collapse
-
#initialize(uri_template:, name:, title: nil, description: nil, icons: [], mime_type: nil, annotations: nil, meta: nil) ⇒ ResourceTemplate
constructor
A new instance of ResourceTemplate.
- #to_h ⇒ Object
Constructor Details
#initialize(uri_template:, name:, title: nil, description: nil, icons: [], mime_type: nil, annotations: nil, meta: nil) ⇒ ResourceTemplate
Returns a new instance of ResourceTemplate.
156 157 158 159 160 161 162 163 164 165 |
# File 'lib/mcp/resource_template.rb', line 156 def initialize(uri_template:, name:, title: nil, description: nil, icons: [], mime_type: nil, annotations: nil, meta: nil) @uri_template = uri_template @name = name @title = title @description = description @icons = icons @mime_type = mime_type @annotations = annotations @meta = end |
Class Attribute Details
.annotations_value ⇒ Object (readonly)
Returns the value of attribute annotations_value.
18 19 20 |
# File 'lib/mcp/resource_template.rb', line 18 def annotations_value @annotations_value end |
.description_value ⇒ Object (readonly)
Returns the value of attribute description_value.
15 16 17 |
# File 'lib/mcp/resource_template.rb', line 15 def description_value @description_value end |
.icons_value ⇒ Object (readonly)
Returns the value of attribute icons_value.
16 17 18 |
# File 'lib/mcp/resource_template.rb', line 16 def icons_value @icons_value end |
.meta_value ⇒ Object (readonly)
Returns the value of attribute meta_value.
19 20 21 |
# File 'lib/mcp/resource_template.rb', line 19 def @meta_value end |
.mime_type_value ⇒ Object (readonly)
Returns the value of attribute mime_type_value.
17 18 19 |
# File 'lib/mcp/resource_template.rb', line 17 def mime_type_value @mime_type_value end |
.title_value ⇒ Object (readonly)
Returns the value of attribute title_value.
14 15 16 |
# File 'lib/mcp/resource_template.rb', line 14 def title_value @title_value end |
.uri_template_value ⇒ Object (readonly)
Returns the value of attribute uri_template_value.
13 14 15 |
# File 'lib/mcp/resource_template.rb', line 13 def uri_template_value @uri_template_value end |
Instance Attribute Details
#annotations ⇒ Object (readonly)
Returns the value of attribute annotations.
154 155 156 |
# File 'lib/mcp/resource_template.rb', line 154 def annotations @annotations end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
154 155 156 |
# File 'lib/mcp/resource_template.rb', line 154 def description @description end |
#icons ⇒ Object (readonly)
Returns the value of attribute icons.
154 155 156 |
# File 'lib/mcp/resource_template.rb', line 154 def icons @icons end |
#meta ⇒ Object (readonly)
Returns the value of attribute meta.
154 155 156 |
# File 'lib/mcp/resource_template.rb', line 154 def @meta end |
#mime_type ⇒ Object (readonly)
Returns the value of attribute mime_type.
154 155 156 |
# File 'lib/mcp/resource_template.rb', line 154 def mime_type @mime_type end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
154 155 156 |
# File 'lib/mcp/resource_template.rb', line 154 def name @name end |
#title ⇒ Object (readonly)
Returns the value of attribute title.
154 155 156 |
# File 'lib/mcp/resource_template.rb', line 154 def title @title end |
#uri_template ⇒ Object (readonly)
Returns the value of attribute uri_template.
154 155 156 |
# File 'lib/mcp/resource_template.rb', line 154 def uri_template @uri_template end |
Class Method Details
.annotations(value = NOT_SET) ⇒ Object
104 105 106 107 108 109 110 |
# File 'lib/mcp/resource_template.rb', line 104 def annotations(value = NOT_SET) if value == NOT_SET @annotations_value else @annotations_value = value.is_a?(Annotations) ? value : Annotations.new(**value) end end |
.contents(server_context: nil, **params) ⇒ Object
21 22 23 |
# File 'lib/mcp/resource_template.rb', line 21 def contents(server_context: nil, **params) raise NotImplementedError, "Subclasses must implement contents" end |
.define(uri_template: nil, name: nil, title: nil, description: nil, icons: [], mime_type: nil, annotations: nil, meta: nil, &block) ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/mcp/resource_template.rb', line 128 def define(uri_template: nil, name: nil, title: nil, description: nil, icons: [], mime_type: nil, annotations: nil, meta: nil, &block) Class.new(self) do uri_template uri_template resource_template_name name title title description description icons icons mime_type mime_type self.annotations(annotations) if annotations define_singleton_method(:contents, &block) if block end end |
.description(value = NOT_SET) ⇒ Object
80 81 82 83 84 85 86 |
# File 'lib/mcp/resource_template.rb', line 80 def description(value = NOT_SET) if value == NOT_SET @description_value else @description_value = value end end |
.icons(value = NOT_SET) ⇒ Object
88 89 90 91 92 93 94 |
# File 'lib/mcp/resource_template.rb', line 88 def icons(value = NOT_SET) if value == NOT_SET @icons_value else @icons_value = value end end |
.inherited(subclass) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/mcp/resource_template.rb', line 38 def inherited(subclass) super subclass.instance_variable_set(:@uri_template_value, nil) subclass.instance_variable_set(:@uri_template_pattern, nil) subclass.instance_variable_set(:@name_value, nil) subclass.instance_variable_set(:@title_value, nil) subclass.instance_variable_set(:@description_value, nil) subclass.instance_variable_set(:@icons_value, nil) subclass.instance_variable_set(:@mime_type_value, nil) subclass.instance_variable_set(:@annotations_value, nil) subclass.instance_variable_set(:@meta_value, nil) end |
.match_uri(uri) ⇒ Object
Matches a concrete URI against the template's simple RFC 6570 level-1 {var} expressions.
Returns a symbol-keyed Hash of variable values, or nil if the URI does not match.
Variables match one or more characters excluding /, and values are not percent-decoded.
123 124 125 126 |
# File 'lib/mcp/resource_template.rb', line 123 def match_uri(uri) match = uri_template_pattern&.match(uri) match&.named_captures&.transform_keys(&:to_sym) end |
.meta(value = NOT_SET) ⇒ Object
112 113 114 115 116 117 118 |
# File 'lib/mcp/resource_template.rb', line 112 def (value = NOT_SET) if value == NOT_SET @meta_value else @meta_value = value end end |
.mime_type(value = NOT_SET) ⇒ Object
96 97 98 99 100 101 102 |
# File 'lib/mcp/resource_template.rb', line 96 def mime_type(value = NOT_SET) if value == NOT_SET @mime_type_value else @mime_type_value = value end end |
.name_value ⇒ Object
68 69 70 |
# File 'lib/mcp/resource_template.rb', line 68 def name_value @name_value || (name.nil? ? nil : StringUtils.handle_from_class_name(name)) end |
.resource_template_name(value = NOT_SET) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/mcp/resource_template.rb', line 60 def resource_template_name(value = NOT_SET) if value == NOT_SET name_value else @name_value = value end end |
.title(value = NOT_SET) ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/mcp/resource_template.rb', line 72 def title(value = NOT_SET) if value == NOT_SET @title_value else @title_value = value end end |
.to_h ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/mcp/resource_template.rb', line 25 def to_h { uriTemplate: uri_template_value, name: name_value, title: title_value, description: description_value, icons: icons_value&.then { |icons| icons.empty? ? nil : icons.map(&:to_h) }, mimeType: mime_type_value, annotations: annotations_value&.to_h, _meta: , }.compact end |
Instance Method Details
#to_h ⇒ Object
167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/mcp/resource_template.rb', line 167 def to_h { uriTemplate: uri_template, name: name, title: title, description: description, icons: icons&.then { |icons| icons.empty? ? nil : icons.map(&:to_h) }, mimeType: mime_type, annotations: annotations&.to_h, _meta: , }.compact end |