Class: MultiSolr::SolrFilterCollection
- Inherits:
-
SolrFilterSimple
- Object
- SolrFilterSimple
- MultiSolr::SolrFilterCollection
- Defined in:
- lib/multi_solr/solr_filter_collection.rb
Overview
Filter für einfachen Wert mit Wertebereich als Collection und Darstellung als Select-Box. Der Wertebereich wird dabei über eine FacetSuche ermittelt (per Methode ‘list_possible_values’ des Searchers)
Instance Attribute Summary
Attributes inherited from SolrFilterSimple
Instance Method Summary collapse
-
#build_solr_query(value) ⇒ Object
overwrite super for array handling.
-
#collection_data(core_handler, context, search_request = nil) ⇒ Object
Ermittelt den Wertebereich entweder über die bei den Options angegebene Proc oder über list_possible_values des Searchers (mit den Namen des Filters als Parameter) Params: core_handler: Instanz des konkreten Solr-CoreHandler (MultiSolr::SingleCoreHandler) context: Hash mit dem Such-Context.
-
#compact_values(value) ⇒ Object
Wandeltangegebener value in ein Array (wenn es noch keins ist) Bereinigt das Array von leeren Elementen.
-
#initialize(filter_name, options = {}) ⇒ SolrFilterCollection
constructor
Constructor des Filters Params: filter_name: Name des Filters als Symbol options: optionale Hash mit den folgenden Optionen (sind alle optional): :render_value siehe Optionen bei MultiSolr::SolrFilterSimple.initialize :solr_query siehe Optionen bei MultiSolr::SolrFilterSimple.initialize :collection_data: Proc, welches den Wertebereich(Array) liefert Wenn nicht angegeben, dann wird per ‘Searcher.list_possible_values’ mit den Name des Filters der Wertebereich ermittelt.
-
#sanitize_values!(values) ⇒ Object
Sanitize solr query value in a array of values.
Methods inherited from SolrFilterSimple
#label, #render_value, #sanitize_value
Constructor Details
#initialize(filter_name, options = {}) ⇒ SolrFilterCollection
Constructor des Filters Params:
filter_name: Name des Filters als Symbol
options: optionale Hash mit den folgenden Optionen (sind alle optional):
:render_value siehe Optionen bei MultiSolr::SolrFilterSimple.initialize
:solr_query siehe Optionen bei MultiSolr::SolrFilterSimple.initialize
:collection_data: Proc, welches den Wertebereich(Array) liefert
Wenn nicht angegeben, dann wird per 'Searcher.list_possible_values'
mit den Name des Filters der Wertebereich ermittelt.
Das Proc bekommt den Such-Context(Hash) als Parameter (enthält i.a. Searcher und force-query-params).
Beispiel: :collection_data => lambda{|context| (2..10).to_a }
:after_collect: optionales Proc, welches den Wertebereich(Array) nachbearbeitet
Das Proc bekommt den Wertebereich(Array) als Parameter
Beispiel: :after_collect => lambda{|data| MasterData::LockType.cached_find_for_short_names(data).map{|l| [l.full_label, l.short_name] } }
22 23 24 25 26 27 28 29 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 22 def initialize filter_name, ={} @collection_proc = .delete(:collection_data) @after_collect_proc = .delete(:after_collect) if [:render_value].nil? [:render_value] = lambda{|value| compact_values(value).join(', ') } end super filter_name, end |
Instance Method Details
#build_solr_query(value) ⇒ Object
overwrite super for array handling
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 33 def build_solr_query value return super(value) unless value.is_a? Array values = compact_values(value) return nil if values.empty? sanitize_values! values if @solr_query_proc q = @solr_query_proc.call(values) else q = values.map{|val| "#{@name}:#{val}"}.join(' OR ') if values.size > 1 q = "(#{q})" end end q end |
#collection_data(core_handler, context, search_request = nil) ⇒ Object
Ermittelt den Wertebereich entweder über die bei den Options angegebene Proc oder über list_possible_values des Searchers (mit den Namen des Filters als Parameter) Params:
core_handler: Instanz des konkreten Solr-CoreHandler (MultiSolr::SingleCoreHandler)
context: Hash mit dem Such-Context.
search_request: optional bestehendes SearchRequest (für DrillDown-Funktionalität)
returns: Array mit dem Wertebereich
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 59 def collection_data core_handler, context, search_request=nil if @collection_proc data = @collection_proc.call(context) else data = core_handler.cached_list_possible_values(self.name, context, search_request) end if @after_collect_proc data = @after_collect_proc.call(data) data.compact! end data end |
#compact_values(value) ⇒ Object
Wandeltangegebener value in ein Array (wenn es noch keins ist) Bereinigt das Array von leeren Elementen
76 77 78 79 80 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 76 def compact_values value value = [value] unless value.is_a?(Array) value.delete_if(&:blank?) value end |
#sanitize_values!(values) ⇒ Object
Sanitize solr query value in a array of values
83 84 85 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 83 def sanitize_values! values values.map!{|val| sanitize_value(val) } end |