# Einfacher Solr-Filter mit einem String als Value # Ist auch Basisklasse für alle erweiterten Filter class MultiSolr::SolrFilterSimple attr_reader :name # Name des Filters als Symbol attr_reader :options # Options des Filters # Constructor des Filters # Params: # filter_name: Name des Filters als Symbol # options: optionale Hash mit den folgenden Optionen (sind alle optional): # :render_value Proc welcher den Filter-Value in einem String zur Darstellung generiert # Ist dieser nicht angegeben so wird 'value.to_s' benutzt # Beispiel: :render_value => lambda{|value| ItemSize::HANDLINGS[value.to_i] } # :field_name Name des zu nutzenden Solr-Fields, default ist filter_name # :solr_query Proc welcher den SolR-Query-String mit den Filter-Value bildet. # Wenn nicht angegeben wird : benutzt # Beispiel: :solr_query => lambda{|value| "teileanzahl:[#{value} TO *]" } # def initialize name, options={} @name = name @field_name = options[:field_name] || @name @value_render_proc = options.delete(:render_value) || lambda{|value| value.to_s } @solr_query_proc = options.delete(:solr_query) || lambda{|value| "#{@field_name}:#{value}"} @options = options || {} end # Bilden des SolR-Query-Strings entweder # per bei der Erzeugung angegebenen solr-query-Proc # oder aus Filter-Namen und dem spezifizierten 'value' # Besteht der 'value' aus mehren Worten, so wird er automatisch in Hochkomma eingeschlossen # ( 'test sample' => '"test sample"') # Params: # value: der konkrete Wert für diesen Filter # returns: String in SOLR-Query-Syntax def build_solr_query value return nil if value.blank? # wenn Leerzeichen vorkommen dann String in " einschliessen value = "\"#{value}\"" if value =~ /\s+/ @solr_query_proc.call(value) end # Konvertieren der Wertes in den Darstellungs-String # Nutzt wenn bei den Init-Options angegeben den hinterlegten Proc (value_render). # Ansonsten wird nur 'value.to_s' aufgerufen. # Params: # value: der konkrete Wert für diesen Filter # returns: String def render_value value return '' if value.nil? @value_render_proc.call(value) end def label I18n.t("solr_search.#{@name}", :default => @name.to_s) end end