diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-02-22 16:00:20 +0100 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-02-22 16:00:20 +0100 |
commit | 709c6685a90bb819696566cc9e42e587546d72dc (patch) | |
tree | 272783009e0a0c8b13b8003dc4bc4e58f3b0b84b /app/models | |
parent | 9c4856bdb11fc9311ab30a97224cee3dfaec492f (diff) |
Made some progress
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/account.rb | 32 | ||||
-rw-r--r-- | app/models/follow.rb | 8 | ||||
-rw-r--r-- | app/models/status.rb | 4 | ||||
-rw-r--r-- | app/models/stream_entry.rb | 33 | ||||
-rw-r--r-- | app/models/user.rb | 3 |
5 files changed, 80 insertions, 0 deletions
diff --git a/app/models/account.rb b/app/models/account.rb index c0b153794..90e8d7610 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -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 diff --git a/app/models/follow.rb b/app/models/follow.rb new file mode 100644 index 000000000..eec01b9ba --- /dev/null +++ b/app/models/follow.rb @@ -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 diff --git a/app/models/status.rb b/app/models/status.rb index a1278ccaa..d98297643 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -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 diff --git a/app/models/stream_entry.rb b/app/models/stream_entry.rb new file mode 100644 index 000000000..cee151a07 --- /dev/null +++ b/app/models/stream_entry.rb @@ -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 diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 000000000..ccfa54e4f --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,3 @@ +class User < ActiveRecord::Base + belongs_to :account, inverse_of: :user +end |