Parent

PublicSuffix::Rule::Base

Abstract rule class

This represent the base class for a Rule definition in the Public Suffix List.

This is intended to be an Abstract class and you shouldn’t create a direct instance. The only purpose of this class is to expose a common interface for all the available subclasses.

Properties

A rule is composed by 4 properties:

name - The name of the rule, corresponding to the rule definition

in the public suffix list

value - The value, a normalized version of the rule name.

The normalization process depends on rule tpe.

type - The rule type (:normal, :wildcard, :exception) labels - The canonicalized rule name

Here’s an example

PublicSuffix::Rule.factory("*.google.com")
#<PublicSuffix::Rule::Wildcard:0x1015c14b0
    @labels=["com", "google"],
    @name="*.google.com",
    @type=:wildcard,
    @value="google.com"
>

Rule Creation

The best way to create a new rule is passing the rule name to the PublicSuffix::Rule.factory method.

PublicSuffix::Rule.factory("com")
# => PublicSuffix::Rule::Normal

PublicSuffix::Rule.factory("*.com")
# => PublicSuffix::Rule::Wildcard

This method will detect the rule type and create an instance from the proper rule class.

Rule Usage

A rule describes the composition of a domain name and explains how to tokenize the domain name into tld, sld and trd.

To use a rule, you first need to be sure the domain you want to tokenize can be handled by the current rule. You can use the #match? method.

rule = PublicSuffix::Rule.factory("com")

rule.match?("google.com")
# => true

rule.match?("google.com")
# => false

Rule order is significant. A domain can match more than one rule. See the Public Suffix Documentation to learn more about rule priority.

When you have the right rule, you can use it to tokenize the domain name.

rule = PublicSuffix::Rule.factory("com")

rule.decompose("google.com")
# => ["google", "com"]

rule.decompose("www.google.com")
# => ["www.google", "com"]

@abstract

Attributes

labels[R]
name[R]
type[R]
value[R]

Public Class Methods

new(name, value = nil) click to toggle source

Initializes a new rule with name and value. If value is nil, name also becomes the value for this rule.

@param [String] name

The name of the rule

@param [String] value

The value of the rule. If nil, defaults to +name+.
# File lib/public_suffix/rule.rb, line 151
def initialize(name, value = nil)
  @name   = name.to_s
  @value  = value || @name
  @type   = self.class.name.split("::").last.downcase.to_sym
  @labels = Domain.domain_to_labels(@value)
end

Public Instance Methods

==(other) click to toggle source

Checks whether this rule is equal to other.

@param [PublicSuffix::Rule::*] other

The rule to compare.

@return [Boolean]

Returns true if this rule and other are instances of the same class
and has the same value, false otherwise.
# File lib/public_suffix/rule.rb, line 166
def ==(other)
  return false unless other.is_a?(self.class)
  self.equal?(other) ||
  self.name == other.name
end
Also aliased as: eql?
allow?(domain) click to toggle source

Checks if this rule allows domain.

@param [String, to_s] domain

The domain name to check.

@return [Boolean]

@example

rule = Rule.factory("*.do")
# => #<PublicSuffix::Rule::Wildcard>
rule.allow?("example.do")
# => false
rule.allow?("www.example.do")
# => true
# File lib/public_suffix/rule.rb, line 210
def allow?(domain)
  !decompose(domain).last.nil?
end
decompose(domain) click to toggle source

@param [String, to_s] domain

The domain name to decompose.

@return [Array<String, nil>]

@raise [NotImplementedError] @abstract

# File lib/public_suffix/rule.rb, line 240
def decompose(domain)
  raise NotImplementedError
end
eql?(other) click to toggle source
Alias for: ==
length() click to toggle source

Gets the length of this rule for comparison. The length usually matches the number of rule parts.

Subclasses might actually override this method.

@return [Integer] The number of parts.

# File lib/public_suffix/rule.rb, line 221
def length
  parts.length
end
match?(domain) click to toggle source

Checks if this rule matches domain.

@param [String, to_s] domain

The domain name to check.

@return [Boolean]

@example

rule = Rule.factory("com")
# #<PublicSuffix::Rule::Normal>
rule.match?("example.com")
# => true
rule.match?("example.net")
# => false
# File lib/public_suffix/rule.rb, line 189
def match?(domain)
  l1 = labels
  l2 = Domain.domain_to_labels(domain)
  odiff(l1, l2).empty?
end
parts() click to toggle source

@raise [NotImplementedError] @abstract

# File lib/public_suffix/rule.rb, line 228
def parts
  raise NotImplementedError
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.