Back to Source Monitor

Favicon Infrastructure: Config, Model, Job, and Discovery

.vbw-planning/milestones/polish-and-reliability/phases/02-favicon-support/PLAN-01-SUMMARY.md

0.13.01.5 KB
Original Source

What Was Built

  • FaviconsSettings configuration class with enabled, fetch_timeout, max_download_size, retry_cooldown_days, allowed_content_types
  • Source model has_one_attached :favicon with if defined?(ActiveStorage) guard
  • Favicons::Discoverer implementing /favicon.ico -> HTML link tag parsing -> Google Favicon API cascade
  • FaviconFetchJob with early-return guards (missing source, disabled, blank URL, already attached, cooldown)
  • Favicons module autoload wired in lib/source_monitor.rb, FaviconsSettings require in configuration.rb

Files Modified

  • lib/source_monitor/configuration/favicons_settings.rb -- new settings class with defaults and enabled?
  • lib/source_monitor/configuration.rb -- added favicons_settings require, attr_reader, initialization
  • app/models/source_monitor/source.rb -- has_one_attached :favicon with ActiveStorage guard
  • lib/source_monitor/favicons/discoverer.rb -- multi-strategy favicon discovery with HTML parsing and validation
  • app/jobs/source_monitor/favicon_fetch_job.rb -- background job with cooldown tracking via metadata JSONB
  • lib/source_monitor.rb -- Favicons module autoload declaration
  • test/lib/source_monitor/configuration/favicons_settings_test.rb -- 13 tests for settings
  • test/models/source_monitor/source_favicon_test.rb -- 3 tests for model attachment
  • test/lib/source_monitor/favicons/discoverer_test.rb -- 16 tests for discovery cascade
  • test/jobs/source_monitor/favicon_fetch_job_test.rb -- 10 tests for job guards and behavior