From 44cb08297c4fd992f3438b8cac99e1364edd4847 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 27 May 2017 00:53:38 +0200 Subject: [PATCH] Fix some nil errors (#3338) * Fix nil input not handled well in AuthorExtractor concern * Fix hard error in ProcessFeedService when replied-to status has been deleted * Fix nil errors in ProcessInteractionService when favourited status cannot be found --- app/services/concerns/author_extractor.rb | 2 ++ app/services/process_feed_service.rb | 2 +- app/services/process_interaction_service.rb | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/services/concerns/author_extractor.rb b/app/services/concerns/author_extractor.rb index d99780e7d..71bd32f37 100644 --- a/app/services/concerns/author_extractor.rb +++ b/app/services/concerns/author_extractor.rb @@ -2,6 +2,8 @@ module AuthorExtractor def author_from_xml(xml) + return nil if xml.nil? + # Try for acct acct = xml.at_xpath('./xmlns:author/xmlns:email', xmlns: TagManager::XMLNS)&.content diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb index 10e947001..87ed68f70 100644 --- a/app/services/process_feed_service.rb +++ b/app/services/process_feed_service.rb @@ -189,7 +189,7 @@ class ProcessFeedService < BaseService def find_status(uri) if TagManager.instance.local_id?(uri) local_id = TagManager.instance.unique_tag_to_local_id(uri, 'Status') - return Status.find(local_id) + return Status.find_by(id: local_id) end Status.find_by(uri: uri) diff --git a/app/services/process_interaction_service.rb b/app/services/process_interaction_service.rb index e9c01103d..bd9afaf2e 100644 --- a/app/services/process_interaction_service.rb +++ b/app/services/process_interaction_service.rb @@ -108,12 +108,18 @@ class ProcessInteractionService < BaseService def favourite!(xml, from_account) current_status = status(xml) + + return if current_status.nil? + favourite = current_status.favourites.where(account: from_account).first_or_create!(account: from_account) NotifyService.new.call(current_status.account, favourite) end def unfavourite!(xml, from_account) current_status = status(xml) + + return if current_status.nil? + favourite = current_status.favourites.where(account: from_account).first favourite&.destroy end