Class News
In: app/models/news.rb
Parent: Document

Clase para las Noticias. Es subclase de Document, por lo que usa la tabla documents

Methods

Included Modules

DraftUtils::InstanceMethods

Public Instance methods

[Source]

    # File app/models/news.rb, line 48
48:   def cuerpo(lang_code=I18n.locale)
49:     c = self.pretty_body(lang_code).dup
50:     if self.subtitle.present?
51:       c = c.gsub(/<[^<]+class="r01Subtitular".*?>#{Regexp.escape(self.subtitle(lang_code))}<\/.+?>/, '')
52:     end
53:     if self.entradilla.present?
54:       c = c.gsub(/<[^<]+class="r01Entradilla".*?>#{Regexp.escape(self.entradilla(lang_code))}<\/.+?>/, '')
55:     end
56:     
57:     return c
58:   end

[Source]

    # File app/models/news.rb, line 40
40:   def entradilla(lang_code=I18n.locale)
41:     if self.send("body_#{lang_code}").present? && m = self.send("body_#{lang_code}").match(/<.+class=\"r01Entradilla\".*?>(.+?)</) 
42:       return m[1]
43:     else
44:       return ""
45:     end
46:   end

Para euskadi.net

[Source]

    # File app/models/news.rb, line 32
32:   def subtitle(lang_code=I18n.locale)
33:     if self.send("body_#{lang_code}").present? && m = self.send("body_#{lang_code}").match(/<.+class=\"r01Subtitular\".*?>(.+?)</) 
34:       return m[1]
35:     else
36:       return ""
37:     end
38:   end

Protected Instance methods

Garantiza que solo habrá una noticia destacada en OpenIrekia. Se llama before_update

[Source]

     # File app/models/news.rb, line 125
125:     def check_only_one_featured
126:       Document.update_all("featured='f'") if featured && featured_changed?
127:     end

No todas las columnas de la tabla documents se utilizan en las noticias, por lo que nos aseguramos de que están vacías. Se llama desde before_save

[Source]

     # File app/models/news.rb, line 95
 95:     def disable_unnecessary_fields
 96:       self.starts_at = nil
 97:       self.ends_at = nil
 98:       self.place = nil
 99:       self.lat = nil
100:       self.lng = nil
101:       self.location_for_gmaps = nil
102:       self.stream_flow_id = false
103:       self.journalist_alert_version = 0
104:       self.staff_alert_version = 0
105:     end

Programa el auto-tweeteo de las noticias publicadas en irekia, con fecha igual a la fecha de publicacion en la web. Se llama desde before_save

[Source]

     # File app/models/news.rb, line 109
109:     def schedule_tweets
110:       # Si ha pasado más de un mes desde su publicación, no lo twitteamos
111:       if self.published_at && self.published_at >= 1.month.ago
112:         # Primero borramos los tweets pendientes de este evento, por si ha cambiado la fecha
113:         DocumentTweet.delete_all(["document_id= ? AND tweeted_at IS NULL", self.id])
114: 
115:         Event::LANGUAGES.each do |l|
116:           if self.published? && self.show_in_irekia? && self.translated_to?(l) && !DocumentTweet.exists?(:document_id => self.id, :tweet_locale => l)
117:             self.tweets.build(:tweet_account => "irekia_news", :tweet_at => self.published_at, :tweet_locale => l)
118:           end
119:         end    
120:       end
121:     end

Crea el directorio para los contenidos multimedia de esta noticia a partir de lo especificado en el parametro multimedia_dir. Se llama desde before_save.

Ver también documentación de Document#full_multimedia_path

[Source]

    # File app/models/news.rb, line 67
67:     def set_and_create_multimedia_path
68:       if (self.new_record? && self.multimedia_dir.present?) || (self.multimedia_dir_changed? && self.multimedia_dir_was.blank? && self.multimedia_dir.present?)
69:         # if m = self.multimedia_dir.match(/^(\d{4}\/\d{2}\/\d{2}\/)/)
70:           self.multimedia_path = self.multimedia_dir.dup
71:           self.multimedia_path << "/" unless self.multimedia_path.match(/\/$/)
72: 
73:         # else
74:         #   date = self.published_at ? self.published_at.to_date : Date.today
75:         #   self.multimedia_path = "#{date.year}/#{date.strftime("%m")}/#{date.strftime("%d")}/#{self.multimedia_dir}/"
76:         # end
77:         m_path_array = self.multimedia_path.split('/')
78:         FileUtils.mkdir_p(Document::MULTIMEDIA_PATH + (m_path_array + ["solo_irekia"]).join('/'))
79:         logger.info "Creando directorio #{Document::MULTIMEDIA_PATH + (m_path_array + ['solo_irekia']).join('/')}"
80:         FileUtils.mkdir_p(Document::MULTIMEDIA_PATH + (m_path_array + ["solo_agencia"]).join('/'))
81:         if Document.exists?(:multimedia_path => self.multimedia_path)
82:           self.errors.add(:multimedia_dir, I18n.t('activerecord.errors.messages.taken'))
83:           return false
84:         else
85:           return self.multimedia_path
86:         end
87:       else
88:         return true
89:       end
90:     end

[Validate]