30 lines
		
	
	
		
			559 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			559 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module DomainNormalizable
 | 
						|
  extend ActiveSupport::Concern
 | 
						|
 | 
						|
  included do
 | 
						|
    before_validation :normalize_domain
 | 
						|
 | 
						|
    scope :by_domain_length, -> { order(domain_char_length.desc) }
 | 
						|
  end
 | 
						|
 | 
						|
  class_methods do
 | 
						|
    def domain_char_length
 | 
						|
      Arel.sql(
 | 
						|
        <<~SQL.squish
 | 
						|
          CHAR_LENGTH(domain)
 | 
						|
        SQL
 | 
						|
      )
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def normalize_domain
 | 
						|
    self.domain = TagManager.instance.normalize_domain(domain&.strip)
 | 
						|
  rescue Addressable::URI::InvalidURIError
 | 
						|
    errors.add(:domain, :invalid)
 | 
						|
  end
 | 
						|
end
 |