Sha256: 6a07a4620a4f40c80abf65f9f9165edb6e2616458e9edb087419c388636cc24e

Contents?: true

Size: 806 Bytes

Versions: 2

Compression:

Stored size: 806 Bytes

Contents

class TbRedirects::DetectRedirectLoopJob < ActiveJob::Base
  queue_as :default

  attr_reader :attempts
  MAX_ATTEMPTS = 100

  def initialize(*arguments)
    super(*arguments)
    @attempts = 0
  end

  def perform(redirect)
    parents = TbRedirect.where(:destination => redirect.source)
    parents.each{ |p| search_parent(p, redirect.destination) }
  end

private

  class AttemptsExceeded < StandardError
  end

  def search_parent(parent, destination_to_check)
    @attempts += 1
    raise AttemptsExceeded, "Exceeded #{MAX_ATTEMPTS} max attempts" if @attempts > MAX_ATTEMPTS

    if parent.source == destination_to_check
      parent.destroy
    else
      parents = TbRedirect.where(:destination => parent.source)
      parents.each{ |p| search_parent(p, destination_to_check) }
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tb_redirects-0.9.0 app/jobs/tb_redirects/detect_redirect_loop_job.rb
tb_redirects-0.0.1 app/jobs/tb_redirects/detect_redirect_loop_job.rb