# 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 # Konvertieren der Wertes in HTML-String für ein Semantic-Form # Params: # sform: das Semantic-Form-Object # value: der konkrete Wert für diesen Filter # context: optionaler Hash mit dem Such-Context z.B. mit; # :solr_searcher_class => Classe des konkreten Searchers # :force_query_params => Parameter für die SolR-Force-Query # form_input_options: optionale Formula-Input-Feld-Options. # Diese werden 1:1 an die Semantic-Form-Methode 'input' weitergegeben # # returns: HTML-Code des Input-Feldes def render_for_semantic_form sform, value, context=nil, form_input_options={} form_input_options = @options[:semantic_form].merge form_input_options if @options.key? :semantic_form set_label form_input_options sform.input "filter_#{@name}", form_input_options end def label I18n.t("solr_search.#{@name}", :default => @name.to_s) end protected # Setzt in die angegebebn 'form_input_options' das Label (nur wenn in diesen noch kein :label definiert ist). # Dieses wird gebildet aus den Filter-Namen unter Nutzung von I18n mit den Prefiy 'solr_search.'. # Beispiel: # filter-name = :lkz => I18n.t('solr_search.lkz') def set_label form_input_options form_input_options.merge!(:label => self.label) unless form_input_options.key?(:label) end end