Module FerretMethods
In: app/models/ferret_methods.rb

Parámetros y métodos comunes para todos los recursos que deben ser indexados por Ferret para las búsquedas. Algunos métodos son sobreescritos en los correspondientes modelos, si no se ajustan a estas definiciones por defecto

Methods

Constants

FERRET_DEFAULT_FIELDS = [:title_es_for_ferret, :title_eu_for_ferret, :title_en_for_ferret, :body_es_for_ferret, :body_eu_for_ferret, :body_en_for_ferret, :tags_for_ferret, :speaker_for_ferret, :place_for_ferret, :pretty_published_at_for_ferret]   Campos en los que se buscará al hacer una búsqueda
FERRET_PARAMS = {:single_index => true, :ferret => {:default_field => FERRET_DEFAULT_FIELDS}, :fields => {:title_es_for_ferret => {:boost => 10, :store => :yes}, :title_eu_for_ferret => {:boost => 10, :store => :yes}, :title_en_for_ferret => {:boost => 10, :store => :yes}, :body_es_for_ferret => {}, :body_eu_for_ferret => {}, :body_en_for_ferret => {}, :speaker_for_ferret => {:boost => 8}, :place_for_ferret => {:boost => 8}, :pretty_published_at_for_ferret => {:boost => 500}, :tags_for_ferret => {:boost => 6}, :show_in_agencia => {:index => :untokenized_omit_norms, :term_vector => :no}, :show_in_irekia => {:index => :untokenized_omit_norms, :term_vector => :no}, # Para mostrar solo las cosas publicadas (published_at > now) :published_at_for_ferret => {:index => :untokenized_omit_norms, :term_vector => :no}, # Para ordenar (mas preferencia los mas nuevos) :published_month_year_for_ferret => {:index => :untokenized_omit_norms, :term_vector => :no}, # En la agencia se pueden ver los eventos 3 dias antes de que empiecen :starts_at_in_agencia_for_ferret => {:index => :untokenized_omit_norms, :term_vector => :no}, :days_from_epoch_for_ferret => {:index => :untokenized_omit_norms, :term_vector => :no}}}   Parámetros para Ferret: campos indexados con sus pesos
LANGUAGES = ['es', 'eu', 'en']    Idiomas disponibles

Public Instance methods

Días desde el 1 de marzo de 2009 hasta la fecha de publicacion. Se usa para dar prioridad en los resultados de busqueda a las noticias más recientes

[Source]

     # File app/models/ferret_methods.rb, line 123
123:   def days_from_epoch_for_ferret
124:     if self.respond_to?("published_at") && self.published_at
125:       date = self.published_at.to_date
126:     else
127:       date = self.created_at.to_date
128:     end
129:     (date - Date.parse('2009-03-01')).to_s.to_i
130:   end

Lugar de un evento

[Source]

     # File app/models/ferret_methods.rb, line 99
 99:   def place_for_ferret
100:     place = ""
101:     unless (self.respond_to?("draft?") && self.draft?)
102:       place << place.tildes if self.respond_to?("place") && !self.place.nil?
103:       place << city.tildes if self.respond_to?("city") && !self.city.nil?
104:     end
105:     return place
106:   end

Fecha en formato de texto

[Source]

    # File app/models/ferret_methods.rb, line 86
86:   def pretty_published_at_for_ferret
87:     if (self.respond_to?("draft?") && self.draft?)
88:       ""
89:     else
90:       if self.respond_to?("published_at") && self.published_at
91:         LANGUAGES.inject("") {|str, l| str << "#{I18n.localize(self.published_at, :format => :long, :locale => l)} " }
92:       else
93:         LANGUAGES.inject("") {|str, l| str << "#{I18n.localize(self.created_at, :format => :long, :locale => l)} " }
94:       end
95:     end
96:   end

Fecha de publicación en formato YYYYMMDD

[Source]

    # File app/models/ferret_methods.rb, line 57
57:   def published_at_for_ferret
58:     if self.respond_to?("published_at") && self.published_at
59:       self.published_at.to_s(:number) 
60:     else
61:       self.created_at.to_s(:number)
62:     end
63:   end

Fecha en formato YYYYMM. Se usa como campo para ordenar los resultados de la busqueda por fecha: Primero saldran las noticias del ultimo mes.

[Source]

    # File app/models/ferret_methods.rb, line 77
77:   def published_month_year_for_ferret
78:     if self.respond_to?("published_at") && self.published_at
79:       self.published_at.strftime("%Y%m").to_i
80:     else
81:       self.created_at.strftime("%Y%m").to_i
82:     end
83:   end

Quien presenta

[Source]

     # File app/models/ferret_methods.rb, line 109
109:   def speaker_for_ferret
110:     sff = []
111:     unless (self.respond_to?("draft?") && self.draft?)
112:       LANGUAGES.each do |l|
113:         if self.respond_to?("speaker_#{l}") && !self.send("speaker_#{l}").nil?
114:           sff << self.send("speaker_#{l}").tildes
115:         end
116:       end
117:     end
118:     sff.uniq.join(" ")
119:   end
 Fecha de inicio en formato YYYYMMDD. Definido para los eventos, porque no deben mostrarse

 los eventos programados para dentro de más de 3 días en la agencia

[Source]

    # File app/models/ferret_methods.rb, line 67
67:   def starts_at_in_agencia_for_ferret
68:     if self.respond_to?("published_at") && self.published_at
69:       self.published_at.to_s(:number) 
70:     else
71:       self.created_at.to_s(:number)
72:     end
73:   end

[Validate]