2018-12-25 21:38:42 -08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module DomainNormalizable
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
|
|
|
|
included do
|
2020-05-31 18:47:20 -07:00
|
|
|
before_validation :normalize_domain
|
2024-03-12 06:09:11 -07:00
|
|
|
|
|
|
|
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
|
2018-12-25 21:38:42 -08:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def normalize_domain
|
2019-02-02 18:59:51 -08:00
|
|
|
self.domain = TagManager.instance.normalize_domain(domain&.strip)
|
2022-11-13 23:07:14 -08:00
|
|
|
rescue Addressable::URI::InvalidURIError
|
|
|
|
errors.add(:domain, :invalid)
|
2018-12-25 21:38:42 -08:00
|
|
|
end
|
|
|
|
end
|