You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.2 KiB
60 lines
1.2 KiB
class Status < ActiveRecord::Base |
|
belongs_to :account, inverse_of: :statuses |
|
|
|
belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status' |
|
belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status' |
|
|
|
has_one :stream_entry, as: :activity, dependent: :destroy |
|
|
|
has_many :favourites, inverse_of: :status, dependent: :destroy |
|
has_many :reblogs, foreign_key: 'reblog_of_id', class_name: 'Status' |
|
has_many :replies, foreign_key: 'in_reply_to_id', class_name: 'Status' |
|
|
|
validates :account, presence: true |
|
validates :uri, uniqueness: true, unless: 'local?' |
|
|
|
def local? |
|
self.uri.nil? |
|
end |
|
|
|
def reblog? |
|
!self.reblog_of_id.nil? |
|
end |
|
|
|
def reply? |
|
!self.in_reply_to_id.nil? |
|
end |
|
|
|
def verb |
|
reblog? ? :share : :post |
|
end |
|
|
|
def object_type |
|
reply? ? :comment : :note |
|
end |
|
|
|
def content |
|
reblog? ? self.reblog.text : self.text |
|
end |
|
|
|
def target |
|
self.reblog |
|
end |
|
|
|
def title |
|
content.truncate(80, omission: "...") |
|
end |
|
|
|
def mentions |
|
m = [] |
|
|
|
m << thread.account if reply? |
|
m << reblog.account if reblog? |
|
|
|
m |
|
end |
|
|
|
after_create do |
|
self.account.stream_entries.create!(activity: self) |
|
end |
|
end
|
|
|