Class: SourceMonitor::Fetching::Completion::FollowUpHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/source_monitor/fetching/completion/follow_up_handler.rb

Overview

Enqueues follow-up scraping work for items created during a fetch.

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Constructor Details

#initialize(enqueuer_class: SourceMonitor::Scraping::Enqueuer, job_class: SourceMonitor::ScrapeItemJob) ⇒ FollowUpHandler

Returns a new instance of FollowUpHandler.



14
15
16
17
# File 'lib/source_monitor/fetching/completion/follow_up_handler.rb', line 14

def initialize(enqueuer_class: SourceMonitor::Scraping::Enqueuer, job_class: SourceMonitor::ScrapeItemJob)
  @enqueuer_class = enqueuer_class
  @job_class = job_class
end

Instance Method Details

#call(source:, result:) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/source_monitor/fetching/completion/follow_up_handler.rb', line 19

def call(source:, result:)
  return Result.new(status: :skipped, enqueued_count: 0, errors: []) unless should_enqueue?(source:, result:)

  enqueued = 0
  errors = []

  Array(result.item_processing&.created_items).each do |item|
    next unless item.present? && item.scraped_at.nil?

    begin
      enqueuer_class.enqueue(item:, source:, job_class:, reason: :auto)
      enqueued += 1
    rescue StandardError => error
      errors << error
      Rails.logger.error(
        "[SourceMonitor::Fetching::Completion::FollowUpHandler] Failed to enqueue scrape for item #{item.id}: #{error.class}: #{error.message}"
      ) if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
    end
  end

  Result.new(status: :applied, enqueued_count: enqueued, errors: errors)
end