class PublicSuffix::List


to tokenize and validate a domain.
The {PublicSuffix::List.default} rule list is used
You can create as many {PublicSuffix::List} you want.
# => nil
list.find(“example.org”)
# => #<PublicSuffix::Rule::Normal>
list.find(“example.com”)
# Search for the rule matching given domain
# => 2
list.size
# Get the size of the list
list << PublicSuffix::Rule.factory(“com”)
list << PublicSuffix::Rule.factory(“it”)
# Push two rules to the list
list = PublicSuffix::List.new
# Create a new list
which matches a specific domain name.
iterate all items in the list or search for the first rule
you can add or remove {PublicSuffix::Rule},
Given a {PublicSuffix::List},
or more {PublicSuffix::Rule}.
A {PublicSuffix::List} is a collection of one

def self.default(**options)

Returns:
  • (PublicSuffix::List) -
def self.default(**options)
  @default ||= parse(File.read(DEFAULT_LIST_PATH), **options)
end

def self.default=(value)

Returns:
  • (PublicSuffix::List) -

Parameters:
  • value (PublicSuffix::List) -- the new list
def self.default=(value)
  @default = value
end

def self.parse(input, private_domains: true)

Returns:
  • (PublicSuffix::List) -

Parameters:
  • private_domains (Boolean) -- whether to ignore the private domains section
  • input (#each_line) -- the list to parse
def self.parse(input, private_domains: true)
  comment_token = "//"
  private_token = "===BEGIN PRIVATE DOMAINS==="
  section = nil # 1 == ICANN, 2 == PRIVATE
  new do |list|
    input.each_line do |line|
      line.strip!
      case # rubocop:disable Style/EmptyCaseCondition
      # skip blank lines
      when line.empty?
        next
      # include private domains or stop scanner
      when line.include?(private_token)
        break if !private_domains
        section = 2
      # skip comments
      when line.start_with?(comment_token) # rubocop:disable Lint/DuplicateBranch
        next
      else
        list.add(Rule.factory(line, private: section == 2))
      end
    end
  end
end

def ==(other)

Returns:
  • (Boolean) -

Parameters:
  • other (PublicSuffix::List) -- the List to compare
def ==(other)
  return false unless other.is_a?(List)
  equal?(other) || @rules == other.rules
end

def add(rule)

Returns:
  • (self) -

Parameters:
  • rule (PublicSuffix::Rule::*) -- the rule to add to the list
def add(rule)
  @rules[rule.value] = rule_to_entry(rule)
  self
end

def clear

Returns:
  • (self) -
def clear
  @rules.clear
  self
end

def default_rule

Returns:
  • (PublicSuffix::Rule::*) -

Other tags:
    See: PublicSuffix::Rule.default_rule -
def default_rule
  PublicSuffix::Rule.default
end

def each(&block)

Iterates each rule in the list.
def each(&block)
  Enumerator.new do |y|
    @rules.each do |key, node|
      y << entry_to_rule(node, key)
    end
  end.each(&block)
end

def empty?

Returns:
  • (Boolean) -
def empty?
  @rules.empty?
end

def entry_to_rule(entry, value)

def entry_to_rule(entry, value)
  entry.type.new(value: value, length: entry.length, private: entry.private)
end

def find(name, default: default_rule, **options)

Returns:
  • (PublicSuffix::Rule::*) -

Parameters:
  • default (PublicSuffix::Rule::*) -- the default rule to return in case no rule matches
  • name (#to_s) -- the hostname
def find(name, default: default_rule, **options)
  rule = select(name, **options).inject do |l, r|
    return r if r.instance_of?(Rule::Exception)
    l.length > r.length ? l : r
  end
  rule || default
end

def initialize

Other tags:
    Yieldparam: self - The newly created instance.

Other tags:
    Yield: - Yields on self.
def initialize
  @rules = {}
  yield(self) if block_given?
end

def rule_to_entry(rule)

def rule_to_entry(rule)
  Rule::Entry.new(rule.class, rule.length, rule.private)
end

def select(name, ignore_private: false)

Returns:
  • (Array) -

Parameters:
  • ignore_private (Boolean) --
  • name (#to_s) -- the hostname
def select(name, ignore_private: false)
  name = name.to_s
  parts = name.split(DOT).reverse!
  index = 0
  query = parts[index]
  rules = []
  loop do
    match = @rules[query]
    rules << entry_to_rule(match, query) if !match.nil? && (ignore_private == false || match.private == false)
    index += 1
    break if index >= parts.size
    query = parts[index] + DOT + query
  end
  rules
end

def size

Returns:
  • (Integer) -
def size
  @rules.size
end