diff options
author | Matt Jankowski <mjankowski@thoughtbot.com> | 2017-04-26 14:09:01 -0400 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-04-26 20:09:01 +0200 |
commit | 8857cabca42fc21d3063862c9954e079e7efd275 (patch) | |
tree | 88220d4d8fa0f258db5a545dc3be923ac4f0af41 /app/services | |
parent | affd75936e069a28247274683e6015d2b66910c1 (diff) |
Domain block service cleanup (#2490)
* Add coverage for domain block service with silence * Get rid of warning about find_each and order * Move domain_block to attr_reader * Move optional clear_media into silence_accounts method * Use blocked_domain method to reduce passed vars * Extract blocked_domain_accounts method to find accounts on the domain * Extract media_from_blocked_domain method to find relevant attachments * Separate destruction of account images and account attachments
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/block_domain_service.rb | 54 |
1 files changed, 40 insertions, 14 deletions
diff --git a/app/services/block_domain_service.rb b/app/services/block_domain_service.rb index 97d2ebcd7..5d13cfc0e 100644 --- a/app/services/block_domain_service.rb +++ b/app/services/block_domain_service.rb @@ -1,36 +1,62 @@ # frozen_string_literal: true class BlockDomainService < BaseService + attr_reader :domain_block + def call(domain_block) + @domain_block = domain_block + process_domain_block + end + + private + + def process_domain_block if domain_block.silence? - silence_accounts!(domain_block.domain) - clear_media!(domain_block.domain) if domain_block.reject_media? + silence_accounts! else - suspend_accounts!(domain_block.domain) + suspend_accounts! end end - private + def silence_accounts! + blocked_domain_accounts.update_all(silenced: true) + clear_media! if domain_block.reject_media? + end - def silence_accounts!(domain) - Account.where(domain: domain).update_all(silenced: true) + def clear_media! + clear_account_images + clear_account_attachments + end + + def suspend_accounts! + blocked_domain_accounts.where(suspended: false).find_each do |account| + account.subscription(api_subscription_url(account.id)).unsubscribe if account.subscribed? + SuspendAccountService.new.call(account) + end end - def clear_media!(domain) - Account.where(domain: domain).find_each do |account| + def clear_account_images + blocked_domain_accounts.find_each do |account| account.avatar.destroy account.header.destroy end + end - MediaAttachment.where(account: Account.where(domain: domain)).find_each do |attachment| + def clear_account_attachments + media_from_blocked_domain.find_each do |attachment| attachment.file.destroy end end - def suspend_accounts!(domain) - Account.where(domain: domain).where(suspended: false).find_each do |account| - account.subscription(api_subscription_url(account.id)).unsubscribe if account.subscribed? - SuspendAccountService.new.call(account) - end + def blocked_domain + domain_block.domain + end + + def blocked_domain_accounts + Account.where(domain: blocked_domain) + end + + def media_from_blocked_domain + MediaAttachment.where(account: blocked_domain_accounts).reorder(nil) end end |