Adding reblogs, favourites, improving atom generation

This commit is contained in:
Eugen Rochko
2016-02-23 19:17:37 +01:00
parent 3b0bc18db9
commit fa33750105
19 changed files with 251 additions and 79 deletions

View File

@ -5,6 +5,7 @@ class Account < ActiveRecord::Base
# Timelines
has_many :stream_entries, inverse_of: :account
has_many :statuses, inverse_of: :account
has_many :favourites, inverse_of: :account
# Follow relations
has_many :active_relationships, class_name: 'Follow', foreign_key: 'account_id', dependent: :destroy
@ -41,7 +42,7 @@ class Account < ActiveRecord::Base
self.username
end
def summary
def content
self.note
end

38
app/models/favourite.rb Normal file
View File

@ -0,0 +1,38 @@
class Favourite < ActiveRecord::Base
belongs_to :account, inverse_of: :favourites
belongs_to :status, inverse_of: :favourites
has_one :stream_entry, as: :activity
def verb
:favorite
end
def title
"#{self.account.acct} favourited a status by #{self.status.account.acct}"
end
def content
title
end
def object_type
target.object_type
end
def target
self.status
end
def mentions
[]
end
def thread
target
end
after_create do
self.account.stream_entries.create!(activity: self)
end
end

View File

@ -2,20 +2,23 @@ class Follow < ActiveRecord::Base
belongs_to :account
belongs_to :target_account, class_name: 'Account'
has_one :stream_entry, as: :activity
validates :account, :target_account, presence: true
validates :account_id, uniqueness: { scope: :target_account_id }
def verb
:follow
end
def object_type
:person
end
def target
self.target_account
end
def object_type
target.object_type
end
def content
"#{self.account.acct} started following #{self.target_account.acct}"
end
@ -24,6 +27,10 @@ class Follow < ActiveRecord::Base
content
end
def mentions
[]
end
after_create do
self.account.stream_entries.create!(activity: self)
end

View File

@ -1,24 +1,56 @@
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
has_many :favourites, inverse_of: :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
:post
reblog? ? :share : :post
end
def object_type
:note
reply? ? :comment : :note
end
def content
self.text
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

View File

@ -5,7 +5,7 @@ class StreamEntry < ActiveRecord::Base
validates :account, :activity, presence: true
def object_type
self.activity.object_type
targeted? ? :activity : self.activity.object_type
end
def verb
@ -13,7 +13,7 @@ class StreamEntry < ActiveRecord::Base
end
def targeted?
[:follow].include? self.verb
[:follow, :share, :favorite].include? verb
end
def target
@ -27,4 +27,16 @@ class StreamEntry < ActiveRecord::Base
def content
self.activity.content
end
def threaded?
[:favorite, :comment].include? verb
end
def thread
self.activity.thread
end
def mentions
self.activity.mentions
end
end