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
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
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
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
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
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
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