class Person

Clase para los usuarios de tipo “persona”, los usuarios que se registran en Irekia para comentar. Es subclase de User, por lo que su tabla es users

Attributes

normas_de_uso[RW]

Public Instance Methods

can_create?(doc_type) click to toggle source

Indica si el usuario puede crear contenidos de tipo doc_type Los tipos de contenido disponibles se pueden consultar en #Permission

# File app/models/person.rb, line 48
def can_create?(doc_type)
  doc_type.eql?("comments")
end
public_city() click to toggle source

Devuelve la ciudad en la que vive.

# File app/models/person.rb, line 39
def public_city
  (raw_location.present? && raw_location.strip.match(/\d+/)) ? city : raw_location
end

Protected Instance Methods

fill_lat_lng_data() click to toggle source

Coge de Google las coordenadas geográficas, ciudad, etc de la persona y las guarda. Se llama desde before_save

# File app/models/person.rb, line 62
def fill_lat_lng_data
  if raw_location_changed?
    loc = MultiGeocoder.geocode("#{raw_location}, Spain")
    unless loc.success
      loc = MultiGeocoder.geocode(raw_location)
    end
  
    if loc.success
      self.lat, self.lng = slightly_modify_location(loc.lat, loc.lng)
      self.city = loc.city
      self.zip = loc.zip
      self.state = loc.state
      self.country_code = loc.country_code
    end
  end
end
reset_unnecessary_fields() click to toggle source

Vacia los campos irrelevantes para este tipo de usuario. Se llama desde before_save

# File app/models/person.rb, line 81
def reset_unnecessary_fields
  self.department_id = nil
  self.media = nil
  self.telephone = nil
  self.organization = nil
  self.stream_flow_ids = []
  self.public_role_es = nil
  self.public_role_eu = nil
  self.public_role_en = nil
  self.gc_id = nil
  self.description_es = nil
  self.description_eu = nil
  self.description_en = nil
  self.politician_has_agenda = nil
end
set_pending_status() click to toggle source

Las personas quedan en estado de “pendientes de aprobación” cuando se dan de alta. Se llama desde before_create

# File app/models/person.rb, line 56
def set_pending_status
  self.status = "pendiente" unless (is_twitter_user? || is_facebook_user?)
end
slightly_modify_location(lat, lng) click to toggle source

Modifica ligeramente la posición que devuelve Google Maps para la localidad de este usuario para que los pinchos no aparezcan todos unos encima de otros.

# File app/models/person.rb, line 99
def slightly_modify_location(lat, lng)
  deviation = 0.0060
  
  lat_rand = rand * deviation
  lng_rand = rand * deviation

  lat_sign = rand < 0.5 ? -1 : 1
  lng_sign = rand < 0.5 ? -1 : 1
  
  new_lat = lat + (lat_sign * lat_rand)
  new_lng = lng + (lng_sign * lng_rand)
  
  return [new_lat, new_lng]
end