From 2c9e672ee2437677d6e39383e5f8e8e0837024b9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 3 Oct 2016 17:16:58 +0200 Subject: [PATCH] Integrating block relationships into the API (read-only for now) --- app/controllers/api/v1/accounts_controller.rb | 4 ++-- app/models/account.rb | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 6d38576751..850d00d2eb 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -40,7 +40,7 @@ class Api::V1::AccountsController < ApiController @accounts = Account.find(ids) @following = Account.following_map(ids, current_user.account_id) @followed_by = Account.followed_by_map(ids, current_user.account_id) - @blocking = {} + @blocking = Account.blocking_map(ids, current_user.account_id) end private @@ -52,6 +52,6 @@ class Api::V1::AccountsController < ApiController def set_relationship @following = Account.following_map([@account.id], current_user.account_id) @followed_by = Account.followed_by_map([@account.id], current_user.account_id) - @blocking = {} + @blocking = Account.blocking_map([@account.id], current_user.account_id) end end diff --git a/app/models/account.rb b/app/models/account.rb index 518b55f192..12e7be05d7 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -52,11 +52,20 @@ class Account < ApplicationRecord active_relationships.where(target_account: other_account).first_or_create!(target_account: other_account) end + def block!(other_account) + block_relationships.where(target_account: other_account).first_or_create!(target_account: other_account) + end + def unfollow!(other_account) follow = active_relationships.find_by(target_account: other_account) follow.destroy unless follow.nil? end + def unblock!(other_account) + block = block_relationships.find_by(target_account: other_account) + block.destroy unless block.nil? + end + def following?(other_account) following.include?(other_account) end @@ -139,6 +148,10 @@ class Account < ApplicationRecord Follow.where(account_id: target_account_ids).where(target_account_id: account_id).map { |f| [f.account_id, true] }.to_h end + def self.blocking_map(target_account_ids, account_id) + Block.where(target_account_id: target_account_ids).where(account_id: account_id).map { |b| [b.target_account_id, true] }.to_h + end + before_create do if local? keypair = OpenSSL::PKey::RSA.new(Rails.env.test? ? 1024 : 2048)