Class: SourceMonitor::Scraping::ItemScraper::AdapterResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/source_monitor/scraping/item_scraper/adapter_resolver.rb

Overview

Resolves scraper adapter classes based on configuration or engine namespace.

Constant Summary collapse

VALID_NAME_PATTERN =
/\A[a-z0-9_]+\z/i.freeze

Instance Method Summary collapse

Constructor Details

#initialize(name:, source:) ⇒ AdapterResolver

Returns a new instance of AdapterResolver.



10
11
12
13
# File 'lib/source_monitor/scraping/item_scraper/adapter_resolver.rb', line 10

def initialize(name:, source:)
  @name = name.to_s
  @source = source
end

Instance Method Details

#resolve!Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/source_monitor/scraping/item_scraper/adapter_resolver.rb', line 15

def resolve!
  raise_unknown!("No scraper adapter configured for source") if name.blank?
  raise_unknown!("Invalid scraper adapter: #{name}") unless VALID_NAME_PATTERN.match?(name)

  configured = SourceMonitor.config.scrapers.adapter_for(name)
  return configured if configured

  constant = resolve_constant
  return constant if constant <= SourceMonitor::Scrapers::Base

  raise_unknown!("Unknown scraper adapter: #{name}")
rescue NameError
  raise_unknown!("Unknown scraper adapter: #{name}")
end