about summary refs log tree commit diff
path: root/app/models/account.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-02-22 16:00:20 +0100
committerEugen Rochko <eugen@zeonfederated.com>2016-02-22 16:00:20 +0100
commit709c6685a90bb819696566cc9e42e587546d72dc (patch)
tree272783009e0a0c8b13b8003dc4bc4e58f3b0b84b /app/models/account.rb
parent9c4856bdb11fc9311ab30a97224cee3dfaec492f (diff)
Made some progress
Diffstat (limited to 'app/models/account.rb')
-rw-r--r--app/models/account.rb32
1 files changed, 32 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