Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
dchuk avatar

Sm Configure

  • 2 installs
  • 3 repo stars
  • Updated July 14, 2026
  • dchuk/source_monitor

Reference for configuring the SourceMonitor Rails engine via its configure DSL: queues, HTTP client, scrapers, retention, events, and auth.

About

Documents how to configure the SourceMonitor engine through its SourceMonitor.configure DSL. A developer uses it when setting engine options in the initializer or debugging configuration issues.

  • Configuration DSL for queues, HTTP client, scrapers, and retention
  • Covers events, realtime, model extensions, and authentication

Sm Configure by the numbers

  • 2 all-time installs (skills.sh)
  • Ranked #3,765 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Jul 29, 2026 (Skillselion catalog sync)
npx skills add https://github.com/dchuk/source_monitor --skill sm-configure

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs2
repo stars3
Last updatedJuly 14, 2026
Repositorydchuk/source_monitor

What it does

Reference for configuring the SourceMonitor Rails engine via its configure DSL: queues, HTTP client, scrapers, retention, events, and auth.

Files

SKILL.mdMarkdownGitHub ↗

sm-configure: Engine Configuration DSL

Comprehensive reference for configuring SourceMonitor via SourceMonitor.configure.

When to Use

  • Adding or modifying settings in config/initializers/source_monitor.rb
  • Understanding what configuration options are available
  • Debugging configuration-related issues
  • Setting up environment-specific overrides

Configuration Entry Point

All configuration lives inside the configure block in the host app's initializer:

SourceMonitor.configure do |config|
  # settings here
end

After the block executes, ModelExtensions.reload! runs automatically to apply any model changes. Restart web and worker processes after changes.

Configuration Sections

The config object (SourceMonitor::Configuration) has 13 sub-sections plus top-level queue/job settings:

SectionAccessorClass
Top-levelconfig.*Configuration
HTTPconfig.httpHTTPSettings
Fetchingconfig.fetchingFetchingSettings
Healthconfig.healthHealthSettings
Scrapersconfig.scrapersScraperRegistry
Retentionconfig.retentionRetentionSettings
Scrapingconfig.scrapingScrapingSettings
Eventsconfig.eventsEvents
Modelsconfig.modelsModels
Realtimeconfig.realtimeRealtimeSettings
Authenticationconfig.authenticationAuthenticationSettings
Imagesconfig.imagesImagesSettings
Faviconsconfig.faviconsFaviconsSettings

See reference/configuration-reference.md for every setting with types, defaults, and examples.

Quick Examples

Queue Configuration

config.queue_namespace = "source_monitor"
config.fetch_queue_name = "source_monitor_fetch"
config.fetch_queue_concurrency = 4

HTTP Client

config.http.timeout = 30
config.http.proxy = ENV["HTTP_PROXY"]
config.http.retry_max = 3

Authentication (Devise)

SourceMonitor is fail-closed by default: with no authenticate_with/authorize_with handler configured, every engine route returns 403 Forbidden. Configure a handler to protect the dashboard (the handler decides access and bypasses the fail-closed guard):

config.authentication.authenticate_with :authenticate_user!
config.authentication.authorize_with ->(c) { c.current_user&.admin? }

For local demos/sandboxes only, opt out of the fail-closed guard (non-production):

config.authentication.open_access = true # default: false -- demo/non-production only

Image Downloads (Active Storage)

config.images.download_to_active_storage = true
config.images.max_download_size = 5 * 1024 * 1024  # 5 MB
config.images.download_timeout = 15
config.images.allowed_content_types = %w[image/jpeg image/png image/webp]

Events

config.events.after_item_created { |e| Notifier.new_item(e.item) }
config.events.register_item_processor ->(ctx) { Indexer.index(ctx.item) }

Model Extensions

config.models.table_name_prefix = "sm_"
config.models.source.include_concern "MyApp::SourceExtension"
config.models.item.validate :custom_check

Favicons (Active Storage)

config.favicons.enabled = true
config.favicons.fetch_timeout = 10
config.favicons.max_download_size = 512 * 1024  # 512 KB
config.favicons.retry_cooldown_days = 14

Realtime

config.realtime.adapter = :redis
config.realtime.redis_url = ENV["REDIS_URL"]

Helper APIs

SourceMonitor.config                         # Current configuration
SourceMonitor.configure { |c| ... }          # Set configuration
SourceMonitor.reset_configuration!           # Revert to defaults (for tests)
SourceMonitor.events                         # Shortcut to config.events
SourceMonitor.queue_name(:fetch)             # Resolved queue name
SourceMonitor.queue_concurrency(:scrape)     # Resolved concurrency
SourceMonitor.mission_control_dashboard_path # Resolved MC path or nil

Key Source Files

FilePurpose
lib/source_monitor/configuration.rbMain Configuration class
lib/source_monitor/configuration/http_settings.rbHTTP client settings
lib/source_monitor/configuration/fetching_settings.rbAdaptive scheduling
lib/source_monitor/configuration/health_settings.rbHealth monitoring
lib/source_monitor/configuration/scraper_registry.rbScraper adapter registry
lib/source_monitor/configuration/retention_settings.rbItem retention
lib/source_monitor/configuration/scraping_settings.rbScraping controls
lib/source_monitor/configuration/events.rbEvent callbacks
lib/source_monitor/configuration/models.rbModel extensions config
lib/source_monitor/configuration/model_definition.rbPer-model definition
lib/source_monitor/configuration/realtime_settings.rbAction Cable settings
lib/source_monitor/configuration/authentication_settings.rbAuth settings
lib/source_monitor/configuration/images_settings.rbImage download settings
lib/source_monitor/configuration/validation_definition.rbValidation wrapper

References

  • reference/configuration-reference.md -- Complete settings reference
  • docs/configuration.md -- Official configuration documentation
  • lib/generators/source_monitor/install/templates/source_monitor.rb.tt -- Initializer template

Testing

Reset configuration between tests:

setup do
  SourceMonitor.reset_configuration!
end

Test custom configuration:

test "custom queue name" do
  SourceMonitor.configure do |config|
    config.fetch_queue_name = "custom_fetch"
  end
  assert_equal "custom_fetch", SourceMonitor.queue_name(:fetch)
end

Checklist

  • [ ] Initializer exists at config/initializers/source_monitor.rb
  • [ ] Queue names match config/queue.yml (or config/solid_queue.yml) entries
  • [x] Dispatcher config includes recurring_schedule: config/recurring.yml (handled by install generator)
  • [ ] Authentication decision made: configure authenticate_with/authorize_with (fail-closed default) OR set config.authentication.open_access = true for demos only
  • [ ] HTTP timeouts appropriate for target feeds
  • [ ] Retention policy set for production
  • [ ] Workers restarted after configuration changes

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.