# Copyright (c) 2010-2011, Diaspora Inc. This file is # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. class Post < ActiveRecord::Base include ApplicationHelper include Diaspora::Likeable include Diaspora::Commentable include Diaspora::Shareable xml_attr :provider_display_name has_many :mentions, :dependent => :destroy has_many :reshares, :class_name => "Reshare", :foreign_key => :root_guid, :primary_key => :guid has_many :resharers, :class_name => 'Person', :through => :reshares, :source => :author belongs_to :o_embed_cache after_create :cache_for_author #scopes scope :includes_for_a_stream, includes(:o_embed_cache, {:author => :profile}, :mentions => {:person => :profile}) #note should include root and photos, but i think those are both on status_message def self.for_a_stream(max_time, order) by_max_time(max_time, order). includes_for_a_stream. where(:type => Stream::Base::TYPES_OF_POST_IN_STREAM). limit(15) end def self.by_max_time(max_time, order='created_at') where("posts.#{order} < ?", max_time).order("posts.#{order} desc") end ############# def self.diaspora_initialize params new_post = self.new params.to_hash new_post.author = params[:author] new_post.public = params[:public] if params[:public] new_post.pending = params[:pending] if params[:pending] new_post.diaspora_handle = new_post.author.diaspora_handle new_post end def reshare_count @reshare_count ||= Post.where(:root_guid => self.guid).count end # @return Returns true if this Post will accept updates (i.e. updates to the caption of a photo). def mutable? false end def activity_streams? false end def triggers_caching? true end def comment_email_subject I18n.t('notifier.a_post_you_shared') end # @return [Boolean] def cache_for_author if self.should_cache_for_author? cache = RedisCache.new(self.author.owner, 'created_at') cache.add(self.created_at.to_i, self.id) end true end # @return [Boolean] def should_cache_for_author? self.triggers_caching? && RedisCache.configured? && RedisCache.acceptable_types.include?(self.type) && user = self.author.owner end end