Made some progress

This commit is contained in:
Eugen Rochko 2016-02-22 16:00:20 +01:00
parent 9c4856bdb1
commit 709c6685a9
61 changed files with 570 additions and 37 deletions

View file

@ -1,6 +1,38 @@
class Account < ActiveRecord::Base
# Local users
has_one :user, inverse_of: :account
# Timelines
has_many :stream_entries, inverse_of: :account
has_many :statuses, inverse_of: :account
# Follow relations
has_many :active_relationships, class_name: 'Follow', foreign_key: 'account_id', dependent: :destroy
has_many :passive_relationships, class_name: 'Follow', foreign_key: 'target_account_id', dependent: :destroy
has_many :following, through: :active_relationships, source: :target_account
has_many :followers, through: :passive_relationships, source: :account
def follow!(other_account)
self.active_relationships.create!(target_account: other_account)
end
def unfollow!(other_account)
self.active_relationships.find_by(target_account: other_account).destroy
end
def following?(other_account)
following.include?(other_account)
end
def local?
self.domain.nil?
end
def keypair
self.private_key.nil? ? OpenSSL::PKey::RSA.new(self.public_key) : OpenSSL::PKey::RSA.new(self.private_key)
end
def subscription(webhook_url)
@subscription ||= OStatus2::Subscription.new(self.remote_url, secret: self.secret, token: self.verify_token, webhook: webhook_url, hub: self.hub_url)
end

8
app/models/follow.rb Normal file
View file

@ -0,0 +1,8 @@
class Follow < ActiveRecord::Base
belongs_to :account
belongs_to :target_account, class_name: 'Account'
after_create do
self.account.stream_entries.create!(activity: self)
end
end

View file

@ -1,3 +1,7 @@
class Status < ActiveRecord::Base
belongs_to :account, inverse_of: :statuses
after_create do
self.account.stream_entries.create!(activity: self)
end
end

View file

@ -0,0 +1,33 @@
class StreamEntry < ActiveRecord::Base
belongs_to :account, inverse_of: :stream_entries
belongs_to :activity, polymorphic: true
def object_type
case self.activity_type
when 'Status'
:note
when 'Follow'
:person
end
end
def verb
case self.activity_type
when 'Status'
:post
when 'Follow'
:follow
end
end
def target
case self.activity_type
when 'Follow'
self.activity.target_account
end
end
def content
self.activity.text if self.activity_type == 'Status'
end
end

3
app/models/user.rb Normal file
View file

@ -0,0 +1,3 @@
class User < ActiveRecord::Base
belongs_to :account, inverse_of: :user
end