Module: Legion::MCP::Utils
- Defined in:
- lib/legion/mcp/utils.rb
Overview
Lightweight summarization and formatting helpers extracted from LoggingSupport. These are pure functions — no logger dependency.
Class Method Summary collapse
- .blank?(value) ⇒ Boolean
- .format_fields(fields) ⇒ Object
- .format_value(value) ⇒ Object
- .request_id_from(*sources) ⇒ Object
- .summarize_array(array, max_items: 6) ⇒ Object
- .summarize_hash(hash, max_pairs: 6) ⇒ Object
- .summarize_identity(identity) ⇒ Object
- .summarize_params(params, max_pairs: 6) ⇒ Object
- .summarize_result(result) ⇒ Object
- .summarize_text(value, max: 120) ⇒ Object
- .summarize_value(value) ⇒ Object
Class Method Details
.blank?(value) ⇒ Boolean
128 129 130 |
# File 'lib/legion/mcp/utils.rb', line 128 def blank?(value) value.nil? || value == '' || value == [] end |
.format_fields(fields) ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/legion/mcp/utils.rb', line 86 def format_fields(fields) fields.compact.filter_map do |key, value| next if blank?(value) "#{key}=#{format_value(value)}" end.join(' ') end |
.format_value(value) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/legion/mcp/utils.rb', line 94 def format_value(value) case value when String summarize_text(value).inspect when Symbol, Numeric, TrueClass, FalseClass value.inspect when Hash summarize_hash(value).inspect when Array summarize_array(value).inspect when NilClass 'nil' else summarize_text(value.inspect).inspect end end |
.request_id_from(*sources) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/legion/mcp/utils.rb', line 10 def request_id_from(*sources) sources.compact.each do |source| next unless source.respond_to?(:[]) %i[request_id correlation_id trace_id].each do |key| value = source[key] return value.to_s unless blank?(value) end %w[request_id correlation_id trace_id].each do |key| value = source[key] return value.to_s unless blank?(value) end end nil end |
.summarize_array(array, max_items: 6) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/legion/mcp/utils.rb', line 50 def summarize_array(array, max_items: 6) return '[]' unless array.is_a?(Array) && !array.empty? items = array.first(max_items).map { |value| summarize_value(value) } suffix = array.size > max_items ? " +#{array.size - max_items} more" : '' "[#{items.join(', ')}]#{suffix}" end |
.summarize_hash(hash, max_pairs: 6) ⇒ Object
40 41 42 43 44 45 46 47 48 |
# File 'lib/legion/mcp/utils.rb', line 40 def summarize_hash(hash, max_pairs: 6) return '{}' unless hash.is_a?(Hash) && !hash.empty? pairs = hash.to_a.first(max_pairs).map do |key, value| "#{key}=#{summarize_value(value)}" end suffix = hash.size > max_pairs ? " +#{hash.size - max_pairs} more" : '' "{#{pairs.join(', ')}}#{suffix}" end |
.summarize_identity(identity) ⇒ Object
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/legion/mcp/utils.rb', line 75 def summarize_identity(identity) case identity when Hash summarize_hash(identity, max_pairs: 4) when NilClass 'none' else summarize_value(identity) end end |
.summarize_params(params, max_pairs: 6) ⇒ Object
36 37 38 |
# File 'lib/legion/mcp/utils.rb', line 36 def summarize_params(params, max_pairs: 6) summarize_hash(params, max_pairs: max_pairs) end |
.summarize_result(result) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/legion/mcp/utils.rb', line 58 def summarize_result(result) if result.respond_to?(:error?) && result.respond_to?(:content) return "mcp_response(error=#{result.error?}, content_items=#{Array(result.content).size})" end case result when Hash "hash(keys=#{result.keys.first(8).join(',')})" when Array "array(size=#{result.size})" when NilClass 'nil' else summarize_value(result) end end |
.summarize_text(value, max: 120) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/legion/mcp/utils.rb', line 28 def summarize_text(value, max: 120) text = value.to_s.gsub(/\s+/, ' ').strip return '' if text.empty? return text if text.length <= max "#{text[0, max - 3]}..." end |
.summarize_value(value) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/legion/mcp/utils.rb', line 111 def summarize_value(value) case value when String summarize_text(value) when Symbol, Numeric, TrueClass, FalseClass value.to_s when Hash summarize_hash(value) when Array summarize_array(value) when NilClass 'nil' else summarize_text(value.inspect) end end |