45 lines
		
	
	
		
			918 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			918 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class HomeFeed < Feed
 | 
						|
  def initialize(account)
 | 
						|
    @account = account
 | 
						|
    super(:home, account.id)
 | 
						|
  end
 | 
						|
 | 
						|
  def async_refresh
 | 
						|
    @async_refresh ||= AsyncRefresh.new(redis_regeneration_key)
 | 
						|
  end
 | 
						|
 | 
						|
  def regenerating?
 | 
						|
    async_refresh.running?
 | 
						|
  rescue Redis::CommandError
 | 
						|
    retry if upgrade_redis_key!
 | 
						|
  end
 | 
						|
 | 
						|
  def regeneration_in_progress!
 | 
						|
    @async_refresh = AsyncRefresh.create(redis_regeneration_key)
 | 
						|
  rescue Redis::CommandError
 | 
						|
    upgrade_redis_key!
 | 
						|
  end
 | 
						|
 | 
						|
  def regeneration_finished!
 | 
						|
    async_refresh.finish!
 | 
						|
  rescue Redis::CommandError
 | 
						|
    retry if upgrade_redis_key!
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def redis_regeneration_key
 | 
						|
    @redis_regeneration_key = "account:#{@account.id}:regeneration"
 | 
						|
  end
 | 
						|
 | 
						|
  def upgrade_redis_key!
 | 
						|
    if redis.type(redis_regeneration_key) == 'string'
 | 
						|
      redis.del(redis_regeneration_key)
 | 
						|
      regeneration_in_progress!
 | 
						|
      true
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |