Class: SourceMonitor::Scraping::ItemScraper
- Inherits:
-
Object
- Object
- SourceMonitor::Scraping::ItemScraper
- Defined in:
- lib/source_monitor/scraping/item_scraper.rb,
lib/source_monitor/scraping/item_scraper/persistence.rb,
lib/source_monitor/scraping/item_scraper/adapter_resolver.rb
Overview
Orchestrates execution of the configured scraper adapter for an item, updating the item record and recording a ScrapeLog entry detailing the outcome. The service is intentionally small so future adapters or scheduling mechanisms can reuse it for both manual and automated flows.
Defined Under Namespace
Classes: AdapterResolver, Persistence, Result
Constant Summary collapse
- UnknownAdapterError =
Class.new(StandardError)
Instance Attribute Summary collapse
-
#adapter_name ⇒ Object
readonly
Returns the value of attribute adapter_name.
-
#adapter_resolver ⇒ Object
readonly
Returns the value of attribute adapter_resolver.
-
#http ⇒ Object
readonly
Returns the value of attribute http.
-
#item ⇒ Object
readonly
Returns the value of attribute item.
-
#persistence ⇒ Object
readonly
Returns the value of attribute persistence.
-
#settings ⇒ Object
readonly
Returns the value of attribute settings.
-
#source ⇒ Object
readonly
Returns the value of attribute source.
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(item:, source: nil, adapter_name: nil, settings: nil, http: SourceMonitor::HTTP) ⇒ ItemScraper
constructor
A new instance of ItemScraper.
Constructor Details
#initialize(item:, source: nil, adapter_name: nil, settings: nil, http: SourceMonitor::HTTP) ⇒ ItemScraper
Returns a new instance of ItemScraper.
27 28 29 30 31 32 33 34 35 |
# File 'lib/source_monitor/scraping/item_scraper.rb', line 27 def initialize(item:, source: nil, adapter_name: nil, settings: nil, http: SourceMonitor::HTTP) @item = item @source = source || item&.source @adapter_name = (adapter_name || @source&.scraper_adapter).to_s @settings = settings @http = http @adapter_resolver = SourceMonitor::Scraping::ItemScraper::AdapterResolver.new(name: @adapter_name, source: @source) @persistence = SourceMonitor::Scraping::ItemScraper::Persistence.new(item: @item, source: @source, adapter_name: @adapter_name) end |
Instance Attribute Details
#adapter_name ⇒ Object (readonly)
Returns the value of attribute adapter_name.
25 26 27 |
# File 'lib/source_monitor/scraping/item_scraper.rb', line 25 def adapter_name @adapter_name end |
#adapter_resolver ⇒ Object (readonly)
Returns the value of attribute adapter_resolver.
25 26 27 |
# File 'lib/source_monitor/scraping/item_scraper.rb', line 25 def adapter_resolver @adapter_resolver end |
#http ⇒ Object (readonly)
Returns the value of attribute http.
25 26 27 |
# File 'lib/source_monitor/scraping/item_scraper.rb', line 25 def http @http end |
#item ⇒ Object (readonly)
Returns the value of attribute item.
25 26 27 |
# File 'lib/source_monitor/scraping/item_scraper.rb', line 25 def item @item end |
#persistence ⇒ Object (readonly)
Returns the value of attribute persistence.
25 26 27 |
# File 'lib/source_monitor/scraping/item_scraper.rb', line 25 def persistence @persistence end |
#settings ⇒ Object (readonly)
Returns the value of attribute settings.
25 26 27 |
# File 'lib/source_monitor/scraping/item_scraper.rb', line 25 def settings @settings end |
#source ⇒ Object (readonly)
Returns the value of attribute source.
25 26 27 |
# File 'lib/source_monitor/scraping/item_scraper.rb', line 25 def source @source end |
Instance Method Details
#call ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/source_monitor/scraping/item_scraper.rb', line 37 def call started_at = Time.current log("scraper:start", started_at:, item:, source:) raise ArgumentError, "Item does not belong to a source" unless source adapter = adapter_resolver.resolve! adapter_result = adapter.call(item:, source:, settings:, http:) result = persistence.persist_success(adapter_result:, started_at:) finalize_result(result) rescue UnknownAdapterError => error log("scraper:unknown_adapter", error: error.) result = persistence.persist_failure(error:, started_at:, message_override: error.) finalize_result(result) rescue StandardError => error log("scraper:exception", error: error.) result = persistence.persist_failure(error:, started_at:) finalize_result(result) end |