# HG changeset patch # User nanaya # Date 1429773275 -32400 # Node ID 8983c426e256679882dc6cc27ac9c8be361ffdab # Parent e5082c4c234dea3b3f3ea52b16957a986311faba Prevent exploding on empty timeline. diff -r e5082c4c234d -r 8983c426e256 app/controllers/tweets_controller.rb --- a/app/controllers/tweets_controller.rb Thu Apr 23 16:05:08 2015 +0900 +++ b/app/controllers/tweets_controller.rb Thu Apr 23 16:14:35 2015 +0900 @@ -3,9 +3,9 @@ end def show - @tweets = Tweet.new(params[:id]).timeline - - @user = @tweets.first.user + client = Tweet.new(params[:id]) + @tweets = client.timeline + @user = client.user rescue Twitter::Error::NotFound head :not_found rescue Twitter::Error::Unauthorized diff -r e5082c4c234d -r 8983c426e256 app/models/tweet.rb --- a/app/models/tweet.rb Thu Apr 23 16:05:08 2015 +0900 +++ b/app/models/tweet.rb Thu Apr 23 16:14:35 2015 +0900 @@ -6,6 +6,17 @@ end end + def user + @user ||= + if timeline.any? + timeline.first.user + else + Rails.cache.fetch({ :user => @twitter_id }, :expires_in => 5.minutes) do + @client.user(@twitter_id) + end + end + end + def initialize(twitter_id) @client = Twitter::REST::Client.new do |config| CFG[:twitter].each do |cfg_key, cfg_value| diff -r e5082c4c234d -r 8983c426e256 app/views/tweets/show.atom.builder --- a/app/views/tweets/show.atom.builder Thu Apr 23 16:05:08 2015 +0900 +++ b/app/views/tweets/show.atom.builder Thu Apr 23 16:14:35 2015 +0900 @@ -1,6 +1,6 @@ atom_feed do |feed| feed.title "#{@user.name} (@#{@user.screen_name})" - feed.updated @tweets.first.created_at + feed.updated @tweets.first.try(:created_at) || Time.at(0) @tweets.each do |tweet| feed.entry tweet, :url => tweet.uri, :updated => tweet.created_at do |entry| diff -r e5082c4c234d -r 8983c426e256 test/controllers/tweets_controller_test.rb --- a/test/controllers/tweets_controller_test.rb Thu Apr 23 16:05:08 2015 +0900 +++ b/test/controllers/tweets_controller_test.rb Thu Apr 23 16:14:35 2015 +0900 @@ -6,6 +6,11 @@ assert_response :success end + test "does not explode on empty timeline" do + get :show, :id => "nanaya_t_empty", :format => :atom + assert_response :success + end + test "should get index" do get :index assert_response :success