Module: Legion::Settings::Extensions::Filter
- Defined in:
- lib/legion/settings/extensions/filter.rb
Overview
Filter helpers for querying tools and extensions by criteria.
Constant Summary collapse
- TOOL_EXACT_FILTERS =
Filter tool entries by criteria.
Supported criteria:
- extension: [String, Symbol] filter by extension name - deferred: [Boolean] filter by deferred flag - sticky: [Boolean] filter by sticky flag - mcp_tier: [Integer] filter by MCP tier - tags: [Array<String>] match any tag - category: [String, Symbol] filter by mcp_category - state: [Symbol] filter tools whose extension is in this state - source: [Symbol] filter by source (:discovery, :manual, :static) { deferred: :deferred, sticky: :sticky, mcp_tier: :mcp_tier, source: :source }.freeze
- TOOL_NORMALIZED_FILTERS =
{ extension: :extension, category: :mcp_category }.freeze
- EXTENSION_BOOLEAN_FILTERS =
Filter extension entries by criteria.
Supported criteria:
- state: [Symbol] filter by lifecycle state - data_required, cache_required, llm_required, etc.: [Boolean] filter by requirement flags - category: [String, Symbol] filter by category - phase: [Integer] filter by phase %i[ data_required cache_required transport_required crypt_required vault_required llm_required skills_required remote_invocable mcp_tools mcp_tools_deferred sticky_tools hot_reloadable ].freeze
Class Method Summary collapse
- .apply_exact_tool_filters!(result, criteria) ⇒ Object
- .apply_extension_boolean_filters!(result, criteria) ⇒ Object
- .apply_extension_filters(entries, criteria) ⇒ Object
- .apply_normalized_tool_filters!(result, criteria) ⇒ Object
- .apply_tool_filters(entries, criteria, extension_store: nil) ⇒ Object
- .filter_by_extension_state!(result, state, extension_store) ⇒ Object
- .filter_by_tags!(result, tags) ⇒ Object
- .normalize(value) ⇒ Object
Class Method Details
.apply_exact_tool_filters!(result, criteria) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/legion/settings/extensions/filter.rb', line 38 def apply_exact_tool_filters!(result, criteria) TOOL_EXACT_FILTERS.each do |criteria_key, entry_key| next unless criteria.key?(criteria_key) value = criteria[criteria_key] result.select! { |t| t[entry_key] == value } end end |
.apply_extension_boolean_filters!(result, criteria) ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/legion/settings/extensions/filter.rb', line 78 def apply_extension_boolean_filters!(result, criteria) EXTENSION_BOOLEAN_FILTERS.each do |key| next unless criteria.key?(key) result.select! { |e| e[key] == criteria[key] } end end |
.apply_extension_filters(entries, criteria) ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'lib/legion/settings/extensions/filter.rb', line 69 def apply_extension_filters(entries, criteria) result = entries.dup result.select! { |e| e[:state] == criteria[:state] } if criteria.key?(:state) result.select! { |e| normalize(e[:category]) == normalize(criteria[:category]) } if criteria.key?(:category) result.select! { |e| e[:phase] == criteria[:phase] } if criteria.key?(:phase) apply_extension_boolean_filters!(result, criteria) result end |
.apply_normalized_tool_filters!(result, criteria) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/legion/settings/extensions/filter.rb', line 47 def apply_normalized_tool_filters!(result, criteria) TOOL_NORMALIZED_FILTERS.each do |criteria_key, entry_key| next unless criteria.key?(criteria_key) value = normalize(criteria[criteria_key]) result.select! { |t| normalize(t[entry_key]) == value } end end |
.apply_tool_filters(entries, criteria, extension_store: nil) ⇒ Object
29 30 31 32 33 34 35 36 |
# File 'lib/legion/settings/extensions/filter.rb', line 29 def apply_tool_filters(entries, criteria, extension_store: nil) result = entries.dup apply_exact_tool_filters!(result, criteria) apply_normalized_tool_filters!(result, criteria) (result, criteria[:tags]) if criteria.key?(:tags) filter_by_extension_state!(result, criteria[:state], extension_store) if criteria.key?(:state) && extension_store result end |
.filter_by_extension_state!(result, state, extension_store) ⇒ Object
91 92 93 94 95 96 |
# File 'lib/legion/settings/extensions/filter.rb', line 91 def filter_by_extension_state!(result, state, extension_store) result.select! do |t| ext = extension_store.find(t[:extension]) ext && ext[:state] == state end end |
.filter_by_tags!(result, tags) ⇒ Object
86 87 88 89 |
# File 'lib/legion/settings/extensions/filter.rb', line 86 def (result, ) = Array().map(&:to_s) result.select! { |t| Array(t[:tags]).map(&:to_s).intersect?() } end |
.normalize(value) ⇒ Object
98 99 100 |
# File 'lib/legion/settings/extensions/filter.rb', line 98 def normalize(value) value.to_s end |