class Comment

Clase para los comentarios en cualquiera de los recursos disponibles: noticias, propuestas, videos…

Public Instance Methods

abused?() click to toggle source

Indica si un comentario ha sido denunciado

# File app/models/comment.rb, line 74
def abused?
  status.eql?('denunciado')
end
approved?() click to toggle source

Indica si un comentario está aprobado

# File app/models/comment.rb, line 54
def approved?
  status.eql?('aprobado') || status.eql?('aprobado tras denuncia')
end
author_name() click to toggle source

Devuelve el nombre del autor del comentario

# File app/models/comment.rb, line 136
def author_name
  self.name || self.user.public_name
end
get_commentable() click to toggle source
# File app/models/comment.rb, line 149
def get_commentable
  # HQ
  begin 
    item = self.commentable
  rescue ActiveRecord::SubclassNotFound  => err
    if err.to_s.match(/The single-table inheritance mechanism failed to locate the subclass: 'Question'/)
      logger.info "Hiding comment on question #{self.commentable_id}"
    end
    item = nil
  end
  return item
end
mark_as_ham!() click to toggle source

Marca el comentario como no-spam, comunicándoselo a Akismet

# File app/models/comment.rb, line 129
def mark_as_ham!
  update_attribute(:status, 'aprobado')
  Akismetor.submit_ham(akismet_attributes)
end
mark_as_spam!() click to toggle source

Marca el comentario como spam, comunicándoselo a Akismet

# File app/models/comment.rb, line 123
def mark_as_spam!
  update_attribute(:status, 'spam')
  Akismetor.submit_spam(akismet_attributes)
end
pending?() click to toggle source

Indica si un comentario está pendiente de aprobación

# File app/models/comment.rb, line 69
def pending?
  status.eql?('pendiente')
end
published_at() click to toggle source
# File app/models/comment.rb, line 145
def published_at
  created_at
end
rejected?() click to toggle source

Indica si un comentario está rechazado

# File app/models/comment.rb, line 59
def rejected?
  status.eql?('rechazado')
end
rrcc_response?() click to toggle source

Indica si el comentario es una respuesta oficial desde la aplicación RRCC

# File app/models/comment.rb, line 79
def rrcc_response?
  self.rrcc_answered_at.present?
end
spam?() click to toggle source

Indica si un comentario es spam

# File app/models/comment.rb, line 64
def spam?
  status.eql?('spam')
end
zforwarded?() click to toggle source

Indica si ha sido redirigido a Zuzenean

# File app/models/comment.rb, line 141
def zforwarded?
  !zforwarded_at.nil?
end

Protected Instance Methods

approve_if_official_commenter() click to toggle source

Aprueba automáticamente el comentario, si es que lo ha hecho un usuario miembro del “staff”. Se llama desde before_create

# File app/models/comment.rb, line 191
def approve_if_official_commenter
  self.status = 'aprobado' if self.is_official?
end
assign_is_official() click to toggle source
# File app/models/comment.rb, line 216
def assign_is_official
  self.is_official = self.user_id && self.user.is_official_commenter?
  return true
end
assign_parents_area() click to toggle source
# File app/models/comment.rb, line 212
def assign_parents_area
  self.tag_list = self.commentable.area_tags if self.commentable.respond_to?(:area_tags)
end
check_abuse_counter() click to toggle source

Marca el comentario como “denunciado”, y por tanto desaparece de la web, cuando ha habido 5 denuncias o más. Se llama desde before_save.

# File app/models/comment.rb, line 197
def check_abuse_counter
  if self.abuse_counter >= 5 && !self.status.eql?('aprobado tras denuncia')
    self.status = 'denunciado'
  end
end
check_for_spam() click to toggle source

Envía el comentario a Akismet, quien determina si es spam o no

# File app/models/comment.rb, line 204
def check_for_spam
  if RAILS_ENV.eql?("production") && Akismetor.spam?(akismet_attributes)
    self.status = 'spam'
  else
    return true
  end
end
nullify_url_if_necessary() click to toggle source

El valor por defecto del campo “url” en el formuario es “http://”. No es una URL válida, por lo que si se deja asi se vacía. Se llama before_validation

# File app/models/comment.rb, line 179
def nullify_url_if_necessary
  self.url = nil if self.url.eql?("http://")
end
set_comment_locale() click to toggle source

Especifica el idioma del comentario a partir del idioma en el que navega el comentarista, para poder mostrar en cada idioma sólo los comentarios en ese mismo idioma.

# File app/models/comment.rb, line 185
def set_comment_locale
  self.locale = I18n.locale.to_s
end
set_user_name_and_email() click to toggle source

Copia el nombre, el email y la url del comentarista de los datos de usuario. Se llama en before_validation. Hay dos casos especiales:

  • El comentario se ha importado automáticamente con Ubervu: en este caso el email es común para todos (sn@irekia.euskadi.net) y el nombre es el nick de twitter

  • El comentarista se ha loggeado con las credenciales de Twitter o Facebook, y por lo tanto no tenemos su email

# File app/models/comment.rb, line 169
def set_user_name_and_email
  if user
    self.name = self.user.public_name if self.name.blank?
    self.email = self.user.email
    self.url = self.user.url if self.url.blank?
  end
end