Class: BrandLogo::Strategies::Scraping::IconFinder

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/brand_logo/strategies/scraping/icon_finder.rb

Overview

Finds all favicon candidates in a parsed HTML document. Returns unfiltered icons — validation/selection is the strategy’s responsibility.

Constant Summary collapse

FAVICON_SELECTORS =
T.let([
  'link[rel~="icon"]',
  'link[rel~="shortcut"]',
  'link[rel~="apple-touch-icon"]',
  'link[rel~="mask-icon"]',
  'link[type="image/x-icon"]',
  'link[type="image/vnd.microsoft.icon"]',
  'link[type="image/png"]',
  'link[type="image/svg+xml"]'
].freeze, T::Array[String])

Instance Method Summary collapse

Constructor Details

#initialize(doc:, base_url:, dimensions_extractor:, default_favicon_checker:) ⇒ IconFinder

Returns a new instance of IconFinder.



33
34
35
36
37
38
# File 'lib/brand_logo/strategies/scraping/icon_finder.rb', line 33

def initialize(doc:, base_url:, dimensions_extractor:, default_favicon_checker:)
  @doc                      = T.let(doc, ParsedDocument)
  @url_normalizer           = T.let(UrlNormalizer.new(base_url), UrlNormalizer)
  @dimensions_extractor     = T.let(dimensions_extractor, DimensionsExtractor)
  @default_favicon_checker  = T.let(default_favicon_checker, DefaultFaviconChecker)
end

Instance Method Details

#findObject



42
43
44
45
46
47
48
49
# File 'lib/brand_logo/strategies/scraping/icon_finder.rb', line 42

def find
  icons = find_icons_from_selectors
  return icons unless icons.empty?

  BrandLogo::Logging.logger.debug('No icons found in HTML, checking default /favicon.ico')
  default_icon = @default_favicon_checker.check(@url_normalizer.default_favicon_url)
  default_icon ? [default_icon] : []
end