From fe6a03bfaf7a93b6e0e8505a1f89e503c267883d Mon Sep 17 00:00:00 2001 From: Karina Kwiatek Date: Sun, 20 Nov 2022 12:20:55 +0100 Subject: [PATCH] Prevent exports crashing out if a related object is nil --- lib/exporter.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/exporter.rb b/lib/exporter.rb index bde198dc..e64b5558 100644 --- a/lib/exporter.rb +++ b/lib/exporter.rb @@ -156,6 +156,8 @@ class Exporter if opts[:include_answers] qobj[:answers] = [] question.answers.each do |a| + next if a.nil? + qobj[:answers] << process_answer(a, include_question: false) end end @@ -179,17 +181,19 @@ class Exporter aobj[f] = answer.send f end - if opts[:include_user] + if opts[:include_user] && answer.user aobj[:user] = user_stub(answer.user) end - if opts[:include_question] + if opts[:include_question] && answer.question aobj[:question] = process_question(answer.question, include_user: true, include_answers: false) end if opts[:include_comments] aobj[:comments] = [] answer.comments.each do |c| + next if c.nil? + aobj[:comments] << process_comment(c, include_user: true, include_answer: false) end end @@ -212,7 +216,7 @@ class Exporter cobj[:user] = user_stub(comment.user) end - if opts[:include_answer] + if opts[:include_answer] && comment.answer cobj[:answer] = process_answer(comment.answer, include_comments: false) end @@ -220,6 +224,8 @@ class Exporter end def process_smile(smile) + return unless smile.parent + sobj = {} %i[id created_at].each do |f| @@ -233,6 +239,7 @@ class Exporter end def user_stub(user) + return nil if user.nil? uobj = {} %i[answered_count asked_count comment_smiled_count commented_count created_at id permanently_banned? screen_name smiled_count].each do |f|