12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- # 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
- #
- class DomainAllow < ApplicationRecord
- include Paginable
- include DomainNormalizable
- include DomainMaterializable
- validates :domain, presence: true, uniqueness: true, domain: true
- scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
- def to_log_human_identifier
- domain
- end
- class << self
- def allowed?(domain)
- !rule_for(domain).nil?
- end
- def allowed_domains
- select(:domain)
- 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
|