From 6a7cd6ce8edfea728569928c17f717f17f649487 Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 11 Nov 2018 17:41:32 -0600 Subject: [PATCH] Fix #3984: Twitter: undefined method `first' for nil:NilClass. Fix Sources::Strategies::Twitter#image_urls to return an empty array instead of nil when the tweet doesn't contain any images. --- app/logical/sources/strategies/twitter.rb | 14 +++++--------- app/logical/twitter_service.rb | 2 ++ app/views/uploads/_image.html.erb | 2 +- test/unit/sources/twitter_test.rb | 9 +++++++++ 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/logical/sources/strategies/twitter.rb b/app/logical/sources/strategies/twitter.rb index 1ee38a602..2f9d714fe 100644 --- a/app/logical/sources/strategies/twitter.rb +++ b/app/logical/sources/strategies/twitter.rb @@ -41,15 +41,11 @@ module Sources::Strategies def image_urls if url =~ /(#{ASSET}[^:]+)/ - return [$1 + ":orig" ] - elsif api_response.blank? - return [url] - end - - [url, referer_url].each do |x| - if x =~ PAGE - return service.image_urls(api_response) - end + [$1 + ":orig" ] + elsif api_response.present? + service.image_urls(api_response) + else + [url] end end memoize :image_urls diff --git a/app/logical/twitter_service.rb b/app/logical/twitter_service.rb index 629c4a57a..f4c30963e 100644 --- a/app/logical/twitter_service.rb +++ b/app/logical/twitter_service.rb @@ -67,6 +67,8 @@ class TwitterService extract_urls_for_status(tweet) elsif tweet.urls.any? extract_urls_for_card(tweet) + else + [] end end end diff --git a/app/views/uploads/_image.html.erb b/app/views/uploads/_image.html.erb index 8d82b5ec0..04156071a 100644 --- a/app/views/uploads/_image.html.erb +++ b/app/views/uploads/_image.html.erb @@ -1,7 +1,7 @@ <% if params[:url] %> <% if ImageProxy.needs_proxy?(@source.image_url) %> <%= image_tag(image_proxy_uploads_path(:url => @source.image_url), :title => "Preview", :id => "image") %> - <% else %> + <% elsif @source.image_url.present? %> <%= image_tag(@source.image_url, :title => "Preview", :id => "image") %> <% end %> diff --git a/test/unit/sources/twitter_test.rb b/test/unit/sources/twitter_test.rb index ace140e9b..6ba806042 100644 --- a/test/unit/sources/twitter_test.rb +++ b/test/unit/sources/twitter_test.rb @@ -97,6 +97,15 @@ module Sources end end + context "A tweet without any images" do + should "not fail" do + @site = Sources::Strategies.find("https://twitter.com/teruyo/status/1058452066060853248") + + assert_nil(@site.image_url) + assert_nothing_raised { @site.to_h } + end + end + context "The source site for twitter" do setup do @site = Sources::Strategies.find("https://mobile.twitter.com/nounproject/status/540944400767922176")