class KonoUtils::BaseSearch

Classe base per i form di ricerca nel sistema

Attributes

scope[RW]
search_form_builder[R]

@return [KonoUtils::SearchFormBuilder] istanziato

Public Class Methods

new(attributes = nil) click to toggle source
Calls superclass method
# File lib/kono_utils/base_search.rb, line 122
def initialize(attributes = nil)
  raise UndefinedSearchModel if search_model.nil?
  raise UndefinedSearchModelScope.new(search_model) unless search_model.respond_to? :search
  super
  self.scope = self.class._search_model
  search_builder_class = search_form_builder_class || KonoUtils.configuration.search_form_builder
  @search_form_builder = search_builder_class.new(self)
end
search_model() click to toggle source

alias method di classe

# File lib/kono_utils/base_search.rb, line 45
def self.search_model
  self._search_model
end
set_search_attributes(*attributes) click to toggle source

Definisce gli attributi da utilizzare per la ricerca passandogli un hash finale si possono passare parametri di default per ognuno dei campi settati a formtastic per renderizzare il campo ES:

set_search_attributes :nome,:cognome,:as=>:string
renderizzerà nome e cognome come stringhe

set_search_attributes :datadinascita, :as=>:datetimepicker
renderizzerà un campo predisposto per attivare il datetimepicker

Possiamo anche passare una Proc come ultimo elemento per la generazione degli attributi per la form,
come argomento è presente il current_user
set_search_attributes :datadinascita, Proc.new { |current_user,form| funzione da lanciare per eseguire la generazione
                                          degli attibuti da passare alla form per generare il campo }

come hash di opzioni possiamo anche passargli una chiave :field_options
con dentro configurazioni vedi TikalCore::SearchAttribute

CALLBACKS Quando vengono creati gli attributi, vengono anche creati gli eventi per ogni attributi, sia per la chiamata del getter (nome_metodo) sia per setter (nome_metodo=), ogni callback ha un prefisso per avere quindi un namespace specifico per questa funzionalità: ES:

 set_search_attributes :datadinascita....

genererà:
       - before_search_attr_datadinascita
       - before_search_attr_datadinascita_set  => relativo al setter
       - around_search_attr_datadinascita
       - around_search_attr_datadinascita_set  => relativo al setter
       - after_search_attr_datadinascita
       - after_search_attr_datadinascita_set   => relativo al setter
# File lib/kono_utils/base_search.rb, line 83
def self.set_search_attributes(*attributes)
  options = attributes.extract_options!
  options = {:as => :string}.merge(options)

  if attributes.last.is_a?(Proc)
    options = attributes.pop
  end

  self._search_attributes = self._search_attributes || []
  attributes.each do |a|

    attr_accessor(a.to_sym)

    define_method(a.to_sym) do
      run_callbacks "search_attr_#{a}" do
        instance_variable_get "@#{a}".to_sym
      end
    end
    define_method("#{a}=".to_sym) do |*args|
      run_callbacks "search_attr_#{a}_set" do
        instance_variable_set "@#{a}".to_sym, *args
      end
    end


    #Definisco delle callbacks per ogni attributo
    define_model_callbacks "search_attr_#{a}".to_sym, "search_attr_#{a}_set".to_sym
    self._search_attributes += [SearchAttribute.new(a, options)]
  end
  self._search_attributes.uniq!
end
set_search_model(model) click to toggle source

Definisce per la classe quale modello utilizzare per la ricerca

# File lib/kono_utils/base_search.rb, line 33
def self.set_search_model(model)
  self._search_model = model
end

Public Instance Methods

data_loaded?() click to toggle source

deve indicarmi se i dati della ricerca sono stati inseriti

# File lib/kono_utils/base_search.rb, line 134
def data_loaded?
  get_query_params.length > 0
end
get_query_params() click to toggle source

Restituisce un hash con tutti i parametri da implementare sulla ricerca

# File lib/kono_utils/base_search.rb, line 160
def get_query_params
  out = {}
  search_attributes.each do |val|
    out[val.field] = self.send(val.field) unless self.send(val.field).blank?
  end

  out
end
make_query() click to toggle source

Genera la query di ricerca, passando i parametri da ricercare nello scoper di ricerca del modelo

# File lib/kono_utils/base_search.rb, line 150
def make_query
  run_callbacks :make_query do
    self.scope.search(get_query_params)
  end
end
method_missing(m, *args, &block) click to toggle source
Calls superclass method
# File lib/kono_utils/base_search.rb, line 177
def method_missing(m, *args, &block)
  if self.search_attributes.collect(&:field).include?(m.to_s.gsub(/=$/, ''))
    self.send(m, *args)
  else
    super
  end
end
search_attributes() click to toggle source

Attributi di ricerca

# File lib/kono_utils/base_search.rb, line 118
def search_attributes
  self.class._search_attributes
end
search_model() click to toggle source

Restituisce il modello di ricerca

# File lib/kono_utils/base_search.rb, line 39
def search_model
  self.class._search_model
end
set_scope(scope) click to toggle source

Setta lo scope iniziale del modello

# File lib/kono_utils/base_search.rb, line 140
def set_scope(scope)
  run_callbacks :set_scope do
    self.scope = scope
  end
end
update_attributes(datas) click to toggle source

Si occupa di aggiornare i valori interni di ricerca

# File lib/kono_utils/base_search.rb, line 171
def update_attributes(datas)
  search_attributes.each do |val|
    self.send("#{val.field}=", val.cast_value(datas[val.field]))
  end
end