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