module CachedMethods

Public Class Methods

included(base) click to toggle source
# File app/models/cached_methods.rb, line 27
def self.included(base)
  base.has_one :cached_key, :as => :cacheable, :dependent => :destroy
  base.after_save :save_cached_keys
  base.after_save :update_elasticsearch_related_server
  base.after_destroy :delete_from_elasticsearch_related_server
end

Public Instance Methods

recommendation_ratings_added_and_grouped_for(target) click to toggle source
# File app/models/cached_methods.rb, line 173
def recommendation_ratings_added_and_grouped_for(target)
  target_type = target.eql?('news') ? 'Document' : 'Order'
  RecommendationRating.find(:all, :conditions => {:source_id => self.id, :source_type => self.class.base_class.name, :target_type => target_type}, :select => "sum(rating) as rating, target_id, target_type, max(updated_at) as updated_at", :group => "target_id, target_type", :order => "rating, updated_at")
end
recommendation_ratings_added_for(target) click to toggle source
# File app/models/cached_methods.rb, line 169
def recommendation_ratings_added_for(target)
  RecommendationRating.find(:first, :conditions => {:source_id => self.id, :source_type => self.class.base_class.name, :target_type => target.class.base_class.name, :target_id => target.id}, :select => "sum(rating) as rating")   
end
save_cached_keys() click to toggle source
# File app/models/cached_methods.rb, line 34
def save_cached_keys
  if self.title_es.present? && self.title_es.tildes.strip_html.present? && self.body_es.present? && self.body_es.tildes.strip_html.present?   
    tit = self.title_es.tildes.strip_html.gsub(/<\/?[^>+]*>/, "").gsub(/[\+\-\*\[\]\=\?]/,'').gsub(/[\r|\n\(\)\-\\"]/, " ").gsub(/([0-9]+)\.([0-9]+)/,'\1\2')
    bod = self.body_es.tildes.strip_html.gsub(/<\/?[^>+\+\-]*>/, "").gsub(/[\+\-\*\[\]\=\?]/,'').gsub(/[\r|\n\(\)\-\\"]/, " ").gsub(/([0-9]+)\.([0-9]+)/,'\1\2')[0, 5000]

    # Se aplica el algoritmo para cada una de las noticias y se guardan en formato json
    cached_keywords = self.cached_key || self.build_cached_key
    begin                                                      
      rk = RakeKeyword.new(bod)
      r = rk.keywords()

      rakeq = tit
      inir = r[0][1]
      r.each do |sk|
        if (sk[1] >= inir/3.5) && (rakeq.length < 250)
          rakeq = rakeq + " " + sk[0]
        end
      end
      rh = {}
      r.each {|k, v| rh[k]=v}
      rakeq_json = rh.to_json

      cached_keywords.rake_es = rakeq_json            
      if cached_keywords.save                         
        logger.info "CachedKeys saved for #{self.class.name} #{self.id}"
      else
        logger.info "Error saving cachedKeys for #{self.class.name} #{self.id} #{self.errors.to_sentence}"
      end
    rescue => err
      logger.info "#{self.class.name} #{self.id} could not be processed: #{err}"
    end      
  end  
end
text_with_selected_keywords() click to toggle source
# File app/models/cached_methods.rb, line 68
def text_with_selected_keywords
  cached_keywords = self.cached_key  
  if cached_keywords.blank? || cached_keywords.new_record? || (self.is_a?(News) && (self.updated_at > cached_keywords.updated_at))
    logger.info "Recalculamos las keywords de #{self.class} #{self.id}"
    self.save_cached_keys
  end
  text = self.title.tildes.strip_html.escape_for_elasticsearch.gsub(/<\/?[^>+]*>/, "").gsub(/[\+\-\*\[\]\=\?]/,'').gsub(/[\r|\n\(\)\-\\"]/, " ").gsub(/([0-9]+)\.([0-9]+)/,'\1\2').downcase
  cached_keys = self.cached_key
  if cached_keys && cached_keys.rake_es.present?
    keywords_with_rating = JSON.parse(cached_keys.rake_es).sort{|a,b| b[1] <=> a[1]}
    top_rating= keywords_with_rating[0][1]
    keywords_with_rating.each do |keyword, rating|
      if (rating >= top_rating/3.5) && text.length < 250
        text << " #{keyword}"
      end
    end  
  else
    text = ""  
  end
  text.escape_for_elasticsearch
end