Module: DomainExtractor::Formatter

Defined in:
lib/domain_extractor/formatter.rb

Overview

Formatter provides URL formatting based on validation modes and protocol requirements.

Formats a URL string according to the specified options:

  • Validation modes: :standard, :root_domain, :root_or_custom_subdomain

  • Protocol options: use_protocol, use_https

  • Trailing slash: use_trailing_slash

Examples:

Standard formatting

DomainExtractor.format('https://www.example.com/')
# => 'https://www.example.com'

Root domain only

DomainExtractor.format('https://shop.example.com/path', validation: :root_domain)
# => 'https://example.com'

Without protocol

DomainExtractor.format('https://example.com', use_protocol: false)
# => 'example.com'

Constant Summary collapse

VALIDATION_MODES =
i[standard root_domain root_or_custom_subdomain].freeze
WWW_SUBDOMAIN =
'www'

Class Method Summary collapse

Class Method Details

.call(url, **options) ⇒ String?

Format a URL according to the specified options

Parameters:

  • url (String)

    The URL to format

  • options (Hash)

    Formatting options

Options Hash (**options):

  • :validation (Symbol) — default: :standard

    Validation mode

  • :use_protocol (Boolean) — default: true

    Include protocol in output

  • :use_https (Boolean) — default: true

    Use https instead of http

  • :use_trailing_slash (Boolean) — default: false

    Include trailing slash

Returns:

  • (String, nil)

    Formatted URL or nil if invalid



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/domain_extractor/formatter.rb', line 37

def call(url, **options)
  validation = options.fetch(:validation, :standard)
  use_protocol = options.fetch(:use_protocol, true)
  use_https = options.fetch(:use_https, true)
  use_trailing_slash = options.fetch(:use_trailing_slash, false)

  validate_options!(validation)

  # Parse the URL
  parsed = DomainExtractor.parse(url)
  return nil unless parsed.valid?

  # Build the formatted URL based on validation mode
  formatted_host = build_host(parsed, validation)
  build_url(formatted_host, use_protocol, use_https, use_trailing_slash)
end