# frozen_string_literal: true # == Schema Information # # Table name: domain_allows # # id :bigint(8) not null, primary key # domain :string default(""), not null # created_at :datetime not null # updated_at :datetime not null # hidden :boolean default(FALSE) # class DomainAllow < ApplicationRecord include DomainNormalizable validates :domain, presence: true, uniqueness: true, domain: true scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } class << self def allowed?(domain) !rule_for(domain).nil? end def rule_for(domain) return if domain.blank? uri = Addressable::URI.new.tap { |u| u.host = domain.gsub(/[\/]/, '') } find_by(domain: uri.normalized_host) end end end