internetee/registry

View on GitHub
app/interactions/whois/delete_record.rb

Summary

Maintainability
A
0 mins
Test Coverage
C
73%
module Whois
  class DeleteRecord < ActiveInteraction::Base
    string :name
    string :type

    validates :type, inclusion: { in: %w[reserved blocked domain disputed zone] }

    def execute
      send "delete_#{type}", name
    end

    # 1. deleting own
    # 2. trying to regenerate reserved in order domain is still in the list
    def delete_domain(name)
      WhoisRecord.where(name: name).destroy_all

      BlockedDomain.find_by(name: name).try(:generate_data)
      ReservedDomain.find_by(name: name).try(:generate_data)
      Dispute.active.find_by(domain_name: name).try(:generate_data)
    end

    def delete_reserved(name)
      remove_status_from_whois(domain_name: name, domain_status: 'Reserved')
    end

    def delete_blocked(name)
      delete_reserved(name)
    end

    def delete_disputed(name)
      return if Dispute.active.find_by(domain_name: name).present?

      remove_status_from_whois(domain_name: name, domain_status: 'disputed')
    end

    def delete_zone(name)
      WhoisRecord.where(name: name).destroy_all
      Whois::Record.where(name: name).destroy_all
    end

    def remove_status_from_whois(domain_name:, domain_status:)
      Whois::Record.where(name: domain_name).each do |r|
        r.json['status'] = r.json['status'].delete_if { |status| status == domain_status }
        r.json['status'].blank? ? r.destroy : r.save
      end
    end
  end
end