Class: Panda::Core::SearchRegistry
- Inherits:
-
Object
- Object
- Panda::Core::SearchRegistry
- Defined in:
- lib/panda/core/search_registry.rb
Class Attribute Summary collapse
-
.providers ⇒ Object
readonly
Returns the value of attribute providers.
Class Method Summary collapse
-
.admin_search(query, limit: 5) ⇒ Hash
Search all registered providers (admin format with grouping).
-
.register(name:, search_class:) ⇒ Object
Register a search provider (idempotent — overwrites any existing provider with the same name).
- .reset! ⇒ Object
-
.search(query, limit: 5) ⇒ Array<Hash>
Search all registered providers (editor format).
Class Attribute Details
.providers ⇒ Object (readonly)
Returns the value of attribute providers.
9 10 11 |
# File 'lib/panda/core/search_registry.rb', line 9 def providers @providers end |
Class Method Details
.admin_search(query, limit: 5) ⇒ Hash
Search all registered providers (admin format with grouping)
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/panda/core/search_registry.rb', line 39 def admin_search(query, limit: 5) return {groups: []} if query.blank? groups = @providers.filter_map do |provider| klass = provider[:search_class] next unless klass.respond_to?(:admin_search) results = klass.admin_search(query, limit: limit) next if results.empty? config = klass.respond_to?(:searchable_config) ? klass.searchable_config : {} { name: config[:group] || provider[:name].to_s.titleize, icon: config[:icon], results: results } rescue => e Rails.logger.warn("[panda-core] Admin search provider #{provider[:name]} failed: #{e.}") if defined?(Rails.logger) nil end {groups: groups} end |
.register(name:, search_class:) ⇒ Object
Register a search provider (idempotent — overwrites any existing provider with the same name)
15 16 17 18 |
# File 'lib/panda/core/search_registry.rb', line 15 def register(name:, search_class:) @providers.reject! { |p| p[:name] == name } @providers << {name: name, search_class: search_class} end |
.reset! ⇒ Object
63 64 65 |
# File 'lib/panda/core/search_registry.rb', line 63 def reset! @providers = [] end |
.search(query, limit: 5) ⇒ Array<Hash>
Search all registered providers (editor format)
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/panda/core/search_registry.rb', line 24 def search(query, limit: 5) return [] if query.blank? @providers.flat_map do |provider| provider[:search_class].editor_search(query, limit: limit) rescue => e Rails.logger.warn("[panda-core] Search provider #{provider[:name]} failed: #{e.}") if defined?(Rails.logger) [] end end |