Module: RubyLLM::MCP::Extensions::Registry
- Defined in:
- lib/ruby_llm/mcp/extensions/registry.rb
Class Method Summary collapse
- .canonicalize_id(id) ⇒ Object
- .deep_merge_hashes(base_hash, override_hash) ⇒ Object
- .deep_merge_values(base_value, override_value) ⇒ Object
- .deep_stringify_keys(value) ⇒ Object
- .merge(global_extensions, client_extensions) ⇒ Object
- .normalize_map(value) ⇒ Object
- .normalize_value(value) ⇒ Object
Class Method Details
.canonicalize_id(id) ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/ruby_llm/mcp/extensions/registry.rb', line 9 def canonicalize_id(id) return nil if id.nil? normalized = id.to_s.strip return nil if normalized.empty? Constants::EXTENSION_ALIASES.fetch(normalized, normalized) end |
.deep_merge_hashes(base_hash, override_hash) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/ruby_llm/mcp/extensions/registry.rb', line 69 def deep_merge_hashes(base_hash, override_hash) merged = base_hash.dup override_hash.each do |key, value| merged[key] = if merged[key].is_a?(Hash) && value.is_a?(Hash) deep_merge_hashes(merged[key], value) else deep_stringify_keys(value) end end merged end |
.deep_merge_values(base_value, override_value) ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/ruby_llm/mcp/extensions/registry.rb', line 37 def deep_merge_values(base_value, override_value) if base_value.is_a?(Hash) && override_value.is_a?(Hash) deep_merge_hashes(base_value, override_value) else normalize_value(override_value) end end |
.deep_stringify_keys(value) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/ruby_llm/mcp/extensions/registry.rb', line 56 def deep_stringify_keys(value) case value when Hash value.each_with_object({}) do |(key, nested_value), acc| acc[key.to_s] = deep_stringify_keys(nested_value) end when Array value.map { |item| deep_stringify_keys(item) } else value end end |
.merge(global_extensions, client_extensions) ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/ruby_llm/mcp/extensions/registry.rb', line 29 def merge(global_extensions, client_extensions) merged = normalize_map(global_extensions) normalize_map(client_extensions).each do |id, config| merged[id] = deep_merge_values(merged[id], config) end merged end |
.normalize_map(value) ⇒ Object
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/ruby_llm/mcp/extensions/registry.rb', line 18 def normalize_map(value) return {} unless value.is_a?(Hash) value.each_with_object({}) do |(id, config), acc| canonical_id = canonicalize_id(id) next if canonical_id.nil? acc[canonical_id] = normalize_value(config) end end |
.normalize_value(value) ⇒ Object
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/ruby_llm/mcp/extensions/registry.rb', line 45 def normalize_value(value) case value when nil {} when Hash deep_stringify_keys(value) else value end end |