Class: KonoUtils::BaseSearch

Inherits:
VirtualModel
  • Object
show all
Defined in:
lib/kono_utils/base_search.rb

Overview

Classe base per i form di ricerca nel sistema

Defined Under Namespace

Classes: UndefinedSearchModel

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = nil) ⇒ BaseSearch

Returns a new instance of BaseSearch.



112
113
114
115
116
# File 'lib/kono_utils/base_search.rb', line 112

def initialize(attributes = nil)
  raise UndefinedSearchModel if search_model.nil?
  super
  self.scope = self.class._search_model
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(m, *args, &block) ⇒ Object



164
165
166
167
168
169
170
# File 'lib/kono_utils/base_search.rb', line 164

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

Instance Attribute Details

#scopeObject

Returns the value of attribute scope.



14
15
16
# File 'lib/kono_utils/base_search.rb', line 14

def scope
  @scope
end

Class Method Details

.set_search_attributes(*attributes) ⇒ Object

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


59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/kono_utils/base_search.rb', line 59

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)

    # instance_variable_set "@#{a}".to_sym, nil
    #
    # unless method_defined? a.to_sym
    define_method(a.to_sym) do
      run_callbacks "search_attr_#{a}" do
        # logger.debug { "Chiamata a metodo virtuale #{a} " }
        instance_variable_get "@#{a}".to_sym
      end
    end
    # end
    #
    # unless method_defined? "#{a}=".to_sym
    define_method("#{a}=".to_sym) do |*args|
      run_callbacks "search_attr_#{a}_set" do
        # logger.debug { "Chiamata a metodo virtuale #{a}= -> #{args.inspect}" }
        instance_variable_set "@#{a}".to_sym, *args
      end
    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 += [KonoUtils::SearchAttribute.new(a, options)]
  end
  self._search_attributes.uniq!
end

.set_search_model(model) ⇒ Object

Definisce per la classe quale modello utilizzare per la ricerca



21
22
23
# File 'lib/kono_utils/base_search.rb', line 21

def self.set_search_model(model)
  self._search_model = model
end

Instance Method Details

#data_loaded?Boolean

deve indicarmi se i dati della ricerca sono stati inseriti

Returns:

  • (Boolean)


121
122
123
# File 'lib/kono_utils/base_search.rb', line 121

def data_loaded?
  get_query_params.length>0
end

#get_query_paramsObject

Restituisce un hash con tutti i parametri da implementare sulla ricerca



147
148
149
150
151
152
153
154
# File 'lib/kono_utils/base_search.rb', line 147

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_queryObject

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



137
138
139
140
141
# File 'lib/kono_utils/base_search.rb', line 137

def make_query
  run_callbacks :make_query do
    self.scope.search(get_query_params)
  end
end

#search_attributesObject

Attributi di ricerca



108
109
110
# File 'lib/kono_utils/base_search.rb', line 108

def search_attributes
  self.class._search_attributes
end

#search_modelObject

Restituisce il modello di ricerca



102
103
104
# File 'lib/kono_utils/base_search.rb', line 102

def search_model
  self.class._search_model
end

#set_scope(scope) ⇒ Object

Setta lo scope iniziale del modello



127
128
129
130
131
# File 'lib/kono_utils/base_search.rb', line 127

def set_scope(scope)
  run_callbacks :set_scope do
    self.scope = scope
  end
end

#update_attributes(datas) ⇒ Object

Si occupa di aggiornare i valori interni di ricerca



158
159
160
161
162
# File 'lib/kono_utils/base_search.rb', line 158

def update_attributes(datas)
  search_attributes.each do |val|
    self.send("#{val.field}=", val.cast_value(datas[val.field]))
  end
end