call4paperz/call4paperz

View on GitHub
app/models/twitter_avatar_promotion.rb

Summary

Maintainability
A
35 mins
Test Coverage
# It moves promotes the twitter avatar to photo. If users have a twitter_avatar,
# but not a photo, this will give then a proper photo. The main goal is to be
# able to remove the twitter_avatar hack.
class TwitterAvatarPromotion
  def initialize(user)
    @user = user
  end

  def promote
    return if @user.photo? || !(avatar = @user.twitter_avatar)

    avatar = follow_redirect_on_fb_avatar(avatar)
    @user.remote_photo_url = avatar
    begin
      @user.save!
      true
    rescue ActiveRecord::RecordInvalid => e
      message = @user.errors['photo'].first
      unless message && message.include?('not download')
        raise e
      end
      false
    end
  end

  private

  def follow_redirect_on_fb_avatar(avatar)
    url = URI.parse(avatar)
    if url.to_s =~ /facebook\.com/
      req = Net::HTTP::Get.new(url.path)
      response = Net::HTTP.start(url.host, url.port) { |http| http.request(req) }
      case response
        when Net::HTTPRedirection
          return response['location']
      end
    end
    avatar
  end
end