| 
									
										
										
										
											2016-11-15 16:56:29 +01:00
										 |  |  | # frozen_string_literal: true | 
					
						
							| 
									
										
										
										
											2017-05-02 09:14:47 +09:00
										 |  |  | # == Schema Information | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Table name: stream_entries | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2018-04-23 18:29:17 +09:00
										 |  |  | #  id            :bigint(8)        not null, primary key | 
					
						
							|  |  |  | #  activity_id   :bigint(8) | 
					
						
							| 
									
										
										
										
											2017-05-02 09:14:47 +09:00
										 |  |  | #  activity_type :string | 
					
						
							|  |  |  | #  created_at    :datetime         not null | 
					
						
							|  |  |  | #  updated_at    :datetime         not null | 
					
						
							|  |  |  | #  hidden        :boolean          default(FALSE), not null | 
					
						
							| 
									
										
										
										
											2018-04-23 18:29:17 +09:00
										 |  |  | #  account_id    :bigint(8) | 
					
						
							| 
									
										
										
										
											2017-05-02 09:14:47 +09:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2016-11-15 16:56:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 17:56:23 +02:00
										 |  |  | class StreamEntry < ApplicationRecord | 
					
						
							| 
									
										
										
										
											2016-03-24 13:21:53 +01:00
										 |  |  |   include Paginable | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-22 16:00:20 +01:00
										 |  |  |   belongs_to :account, inverse_of: :stream_entries | 
					
						
							|  |  |  |   belongs_to :activity, polymorphic: true | 
					
						
							| 
									
										
										
										
											2017-02-12 00:48:53 +01:00
										 |  |  |   belongs_to :status, foreign_type: 'Status', foreign_key: 'activity_id', inverse_of: :stream_entry | 
					
						
							| 
									
										
										
										
											2016-09-08 20:36:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-22 18:10:30 +01:00
										 |  |  |   validates :account, :activity, presence: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-12 19:09:21 +02:00
										 |  |  |   STATUS_INCLUDES = [:account, :stream_entry, :conversation, :media_attachments, :tags, mentions: :account, reblog: [:stream_entry, :account, :conversation, :media_attachments, :tags, mentions: :account], thread: [:stream_entry, :account]].freeze | 
					
						
							| 
									
										
										
										
											2016-09-08 20:36:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-07 05:56:56 +02:00
										 |  |  |   default_scope { where(activity_type: 'Status') } | 
					
						
							| 
									
										
										
										
											2017-05-23 09:53:01 +09:00
										 |  |  |   scope :recent, -> { reorder(id: :desc) } | 
					
						
							| 
									
										
										
										
											2017-02-12 00:48:53 +01:00
										 |  |  |   scope :with_includes, -> { includes(:account, status: STATUS_INCLUDES) } | 
					
						
							| 
									
										
										
										
											2016-03-21 10:31:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-05 22:00:21 -04:00
										 |  |  |   delegate :target, :title, :content, :thread, | 
					
						
							|  |  |  |            to: :status, | 
					
						
							|  |  |  |            allow_nil: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-22 16:00:20 +01:00
										 |  |  |   def object_type | 
					
						
							| 
									
										
										
										
											2017-04-07 05:56:56 +02:00
										 |  |  |     orphaned? || targeted? ? :activity : status.object_type | 
					
						
							| 
									
										
										
										
											2016-02-22 16:00:20 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def verb | 
					
						
							| 
									
										
										
										
											2017-04-07 05:56:56 +02:00
										 |  |  |     orphaned? ? :delete : status.verb | 
					
						
							| 
									
										
										
										
											2016-02-22 18:10:30 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def targeted? | 
					
						
							| 
									
										
										
										
											2017-02-11 17:09:36 +01:00
										 |  |  |     [:follow, :request_friend, :authorize, :reject, :unfollow, :block, :unblock, :share, :favorite].include? verb | 
					
						
							| 
									
										
										
										
											2016-02-22 16:00:20 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-23 19:17:37 +01:00
										 |  |  |   def threaded? | 
					
						
							| 
									
										
										
										
											2016-10-10 02:55:30 +02:00
										 |  |  |     (verb == :favorite || object_type == :comment) && !thread.nil? | 
					
						
							| 
									
										
										
										
											2016-02-23 19:17:37 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def mentions | 
					
						
							| 
									
										
										
										
											2018-10-17 17:13:04 +02:00
										 |  |  |     orphaned? ? [] : status.active_mentions.map(&:account) | 
					
						
							| 
									
										
										
										
											2016-09-08 20:36:01 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-16 10:58:58 +01:00
										 |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def orphaned? | 
					
						
							| 
									
										
										
										
											2017-04-07 05:56:56 +02:00
										 |  |  |     status.nil? | 
					
						
							| 
									
										
										
										
											2016-02-23 19:17:37 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-02-22 16:00:20 +01:00
										 |  |  | end |