Class: PublicSuffix::Domain

Inherits:
Object
  • Object
show all
Defined in:
lib/public_suffix/domain.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tld) ⇒ Domain #initialize(tld, sld) ⇒ Domain #initialize(tld, sld, trd) ⇒ Domain

Creates and returns a new PublicSuffix::Domain instance.

Examples:

Initialize with a TLD

PublicSuffix::Domain.new("com")
# => #<PublicSuffix::Domain @tld="com">

Initialize with a TLD and SLD

PublicSuffix::Domain.new("com", "example")
# => #<PublicSuffix::Domain @tld="com", @trd=nil>

Initialize with a TLD, SLD and TRD

PublicSuffix::Domain.new("com", "example", "wwww")
# => #<PublicSuffix::Domain @tld="com", @trd=nil, @sld="example">

Overloads:

  • #initialize(tld) ⇒ Domain

    Initializes with a tld.

    Parameters:

    • tld (String)

      The TLD (extension)

  • #initialize(tld, sld) ⇒ Domain

    Initializes with a tld and sld.

    Parameters:

    • tld (String)

      The TLD (extension)

    • sld (String)

      The TRD (domain)

  • #initialize(tld, sld, trd) ⇒ Domain

    Initializes with a tld, sld and trd.

    Parameters:

    • tld (String)

      The TLD (extension)

    • sld (String)

      The SLD (domain)

    • tld (String)

      The TRD (subdomain)

Yields:

  • (self)

    Yields on self.

Yield Parameters:



66
67
68
69
# File 'lib/public_suffix/domain.rb', line 66

def initialize(*args, &block)
  @tld, @sld, @trd = args
  yield(self) if block_given?
end

Class Method Details

.domain_to_labels(domain) ⇒ Array<String>

Splits a string into its possible labels as a domain in reverse order from the input string.

The input is not validated, but it is assumed to be a valid domain.

Examples:


domain_to_labels('google.com')
# => ['com', 'google']

domain_to_labels('google.co.uk')
# => ['uk', 'co', 'google']

Parameters:

  • domain (String, #to_s)

    The domain name to split.

Returns:

  • (Array<String>)


32
33
34
# File 'lib/public_suffix/domain.rb', line 32

def self.domain_to_labels(domain)
  domain.to_s.split(".").reverse
end

Instance Method Details

#domainString

Returns a domain-like representation of this object if the object is a #domain?, nil otherwise.

PublicSuffix::Domain.new("com").domain
# => nil

PublicSuffix::Domain.new("com", "google").domain
# => "google.com"

PublicSuffix::Domain.new("com", "google", "www").domain
# => "www.google.com"

This method doesn’t validate the input. It handles the domain as a valid domain name and simply applies the necessary transformations.

# This is an invalid domain
PublicSuffix::Domain.new("zip", "google").domain
# => "google.zip"

This method returns a FQD, not just the domain part. To get the domain part, use #sld (aka second level domain).

PublicSuffix::Domain.new("com", "google", "www").domain
# => "google.com"

PublicSuffix::Domain.new("com", "google", "www").sld
# => "google"

Returns:

  • (String)

See Also:



166
167
168
169
# File 'lib/public_suffix/domain.rb', line 166

def domain
  return unless domain?
  [sld, tld].join(".")
end

#domain?Boolean

Checks whether self looks like a domain.

This method doesn’t actually validate the domain. It only checks whether the instance contains a value for the #tld and #sld attributes. If you also want to validate the domain, use #valid_domain? instead.

Examples:


PublicSuffix::Domain.new("com").domain?
# => false

PublicSuffix::Domain.new("com", "google").domain?
# => true

PublicSuffix::Domain.new("com", "google", "www").domain?
# => true

# This is an invalid domain, but returns true
# because this method doesn't validate the content.
PublicSuffix::Domain.new("zip", "google").domain?
# => true

Returns:

  • (Boolean)

See Also:



248
249
250
# File 'lib/public_suffix/domain.rb', line 248

def domain?
  !(tld.nil? || sld.nil?)
end

#is_a_domain?Boolean

Checks whether self is exclusively a domain, and not a subdomain.

Returns:

  • (Boolean)


288
289
290
# File 'lib/public_suffix/domain.rb', line 288

def is_a_domain?
  domain? && !subdomain?
end

#is_a_subdomain?Boolean

Checks whether self is exclusively a subdomain.

Returns:

  • (Boolean)


295
296
297
# File 'lib/public_suffix/domain.rb', line 295

def is_a_subdomain?
  subdomain?
end

#nameString

Returns the full domain name.

Examples:

Gets the domain name of a domain

PublicSuffix::Domain.new("com", "google").name
# => "google.com"

Gets the domain name of a subdomain

PublicSuffix::Domain.new("com", "google", "www").name
# => "www.google.com"

Returns:

  • (String)


129
130
131
# File 'lib/public_suffix/domain.rb', line 129

def name
  [trd, sld, tld].reject { |part| part.nil? }.join(".")
end

#rulePublicSuffix::Rule::Base?

Returns the rule matching this domain in the default List.

Returns:



215
216
217
# File 'lib/public_suffix/domain.rb', line 215

def rule
  List.default.find(name)
end

#sldString?

Returns the Second Level Domain part, aka the domain part.

Returns:

  • (String, nil)


105
106
107
# File 'lib/public_suffix/domain.rb', line 105

def sld
  @sld
end

#subdomainString

Returns a domain-like representation of this object if the object is a #subdomain?, nil otherwise.

PublicSuffix::Domain.new("com").subdomain
# => nil

PublicSuffix::Domain.new("com", "google").subdomain
# => nil

PublicSuffix::Domain.new("com", "google", "www").subdomain
# => "www.google.com"

This method doesn’t validate the input. It handles the domain as a valid domain name and simply applies the necessary transformations.

# This is an invalid domain
PublicSuffix::Domain.new("zip", "google", "www").subdomain
# => "www.google.zip"

This method returns a FQD, not just the domain part. To get the domain part, use #tld (aka third level domain).

PublicSuffix::Domain.new("com", "google", "www").subdomain
# => "www.google.com"

PublicSuffix::Domain.new("com", "google", "www").trd
# => "www"

Returns:

  • (String)

See Also:



204
205
206
207
# File 'lib/public_suffix/domain.rb', line 204

def subdomain
  return unless subdomain?
  [trd, sld, tld].join(".")
end

#subdomain?Boolean

Checks whether self looks like a subdomain.

This method doesn’t actually validate the subdomain. It only checks whether the instance contains a value for the #tld, #sld and #trd attributes. If you also want to validate the domain, use #valid_subdomain? instead.

Examples:


PublicSuffix::Domain.new("com").subdomain?
# => false

PublicSuffix::Domain.new("com", "google").subdomain?
# => false

PublicSuffix::Domain.new("com", "google", "www").subdomain?
# => true

# This is an invalid domain, but returns true
# because this method doesn't validate the content.
PublicSuffix::Domain.new("zip", "google", "www").subdomain?
# => true

Returns:

  • (Boolean)

See Also:



280
281
282
# File 'lib/public_suffix/domain.rb', line 280

def subdomain?
  !(tld.nil? || sld.nil? || trd.nil?)
end

#tldString?

Returns the Top Level Domain part, aka the extension.

Returns:

  • (String, nil)


98
99
100
# File 'lib/public_suffix/domain.rb', line 98

def tld
  @tld
end

#to_aArray<String, nil>

Returns an array containing the domain parts.

Examples:


PublicSuffix::Domain.new("google.com").to_a
# => [nil, "google", "com"]

PublicSuffix::Domain.new("www.google.com").to_a
# => [nil, "google", "com"]

Returns:

  • (Array<String, nil>)


90
91
92
# File 'lib/public_suffix/domain.rb', line 90

def to_a
  [trd, sld, tld]
end

#to_sString

Returns a string representation of this object.

Returns:

  • (String)


74
75
76
# File 'lib/public_suffix/domain.rb', line 74

def to_s
  name
end

#trdString?

Returns the Third Level Domain part, aka the subdomain part.

Returns:

  • (String, nil)


112
113
114
# File 'lib/public_suffix/domain.rb', line 112

def trd
  @trd
end

#valid?Boolean

Checks whether self is assigned and allowed according to default List.

This method triggers a new rule lookup in the default List, which is a quite intensive task.

Examples:

Check a valid domain

Domain.new("com", "example").valid?
# => true

Check a valid subdomain

Domain.new("com", "example", "www").valid?
# => true

Check a not-assigned domain

Domain.new("zip", "example").valid?
# => false

Check a not-allowed domain

Domain.new("do", "example").valid?
# => false
Domain.new("do", "example", "www").valid?
# => true

Returns:

  • (Boolean)


325
326
327
328
# File 'lib/public_suffix/domain.rb', line 325

def valid?
  r = rule
  !r.nil? && r.allow?(name)
end

#valid_domain?Boolean

Checks whether self looks like a domain and validates according to default List.

Examples:


PublicSuffix::Domain.new("com").domain?
# => false

PublicSuffix::Domain.new("com", "google").domain?
# => true

PublicSuffix::Domain.new("com", "google", "www").domain?
# => true

# This is an invalid domain
PublicSuffix::Domain.new("zip", "google").false?
# => true

Returns:

  • (Boolean)

See Also:



354
355
356
# File 'lib/public_suffix/domain.rb', line 354

def valid_domain?
  domain? && valid?
end

#valid_subdomain?Boolean

Checks whether self looks like a subdomain and validates according to default List.

Examples:


PublicSuffix::Domain.new("com").subdomain?
# => false

PublicSuffix::Domain.new("com", "google").subdomain?
# => false

PublicSuffix::Domain.new("com", "google", "www").subdomain?
# => true

# This is an invalid domain
PublicSuffix::Domain.new("zip", "google", "www").subdomain?
# => false

Returns:

  • (Boolean)

See Also:



381
382
383
# File 'lib/public_suffix/domain.rb', line 381

def valid_subdomain?
  subdomain? && valid?
end