Class Journalist
In: app/models/journalist.rb
Parent: User

Clase para los usuarios de tipo "Periodista". Es subclase de User, por lo que su tabla es users

Methods

Attributes

normas_de_uso  [RW] 

Public Class methods

Genera un password aleatorio snippets.dzone.com/posts/show/2137

[Source]

    # File app/models/journalist.rb, line 21
21:   def self.random_password(size = 5)
22:     chars = (('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a) - %w(i o 0 1 l 0 I O)
23:     (1..size).collect{|a| chars[rand(chars.size)] }.join
24:   end

Public Instance methods

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

[Source]

    # File app/models/journalist.rb, line 37
37:   def can_create?(doc_type)
38:     doc_type.eql?("comments")
39:   end

I have to override this method because has_many :through does not call destroy on subscriptions, and I need it to delete the pending event alerts

[Source]

    # File app/models/journalist.rb, line 46
46:   def department_ids=(new_dept_ids)
47:     new_dept_ids.collect!(&:to_i)
48:     old_dept_ids = self.department_ids.dup
49:     existing_department_ids = old_dept_ids & new_dept_ids
50:     dept_ids_to_remove = old_dept_ids - existing_department_ids
51:     dept_ids_to_add =  new_dept_ids - existing_department_ids
52:     self.subscriptions.find_all_by_department_id(dept_ids_to_remove).each {|s| s.destroy}
53:     dept_ids_to_add.each {|d| self.subscriptions.build(:department_id => d)}
54:   end

Devuelve un array con los departamentos y organismos a los que está suscrito

[Source]

    # File app/models/journalist.rb, line 27
27:   def organization_ids
28:     o_ids = []
29:     self.departments.each do |dept|
30:       o_ids = o_ids + [dept.id]+dept.organization_ids
31:     end
32:     o_ids
33:   end

[Source]

    # File app/models/journalist.rb, line 57
57:   def save_departments
58:     self.subscriptions.each {|s| s.save}
59:   end

[Source]

    # File app/models/journalist.rb, line 41
41:   def validate
42:     errors.add(:department_ids, "no puede estar vacío") if self.subscriptions.length == 0 
43:   end

Protected Instance methods

[Source]

     # File app/models/journalist.rb, line 92
 92:     def delete_pending_alerts_if_required
 93:       if self.has_event_alerts
 94:         true
 95:       else
 96:         # Fixme: I cannot use this because it generates spammable_type='User' instead
 97:         # of spammable_type='Journalist' 
 98:         # self.event_alerts.unsent.each {|alert| alert.destroy}
 99:         
100:         EventAlert.unsent.find(:all, :conditions => "spammable_id=#{self.id} AND spammable_type='Journalist'").each {|alert| alert.destroy}
101:       end
102:     end

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

[Source]

    # File app/models/journalist.rb, line 65
65:     def empty_unnecessary_fields
66:       self.department_id = nil
67:       self.stream_flow_ids = []
68:       self.raw_location = nil
69:       self.lat = nil
70:       self.lng = nil
71:       self.city = nil
72:       self.state = nil
73:       self.country_code = nil
74:       self.zip = nil
75:       self.photo_file_name = nil
76:       self.photo_content_type = nil
77:       self.photo_file_size = nil
78:       self.photo_updated_at = nil      
79:     end

[Source]

    # File app/models/journalist.rb, line 87
87:     def enable_event_alerts
88:       self.has_event_alerts = true
89:       self.alerts_locale = I18n.locale if  self.alerts_locale.nil?
90:     end

Los periodistas quedan en estado de "pendientes de aprobación" cuando se dan de alta. Se llama desde before_create

[Source]

    # File app/models/journalist.rb, line 83
83:     def set_pending_status
84:       self.status = "pendiente"
85:     end

[Validate]