Module: SourceMonitor::Scraping::State

Extended by:
State
Included in:
State
Defined in:
lib/source_monitor/scraping/state.rb

Overview

Centralizes scrape status transitions so jobs, schedulers, and UI helpers keep item states consistent and broadcast changes in one place.

Constant Summary collapse

IN_FLIGHT_STATUSES =
%w[pending processing].freeze

Instance Method Summary collapse

Instance Method Details

#clear_inflight!(item, broadcast: true, lock: true) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'lib/source_monitor/scraping/state.rb', line 30

def clear_inflight!(item, broadcast: true, lock: true)
  with_item(item, lock:) do |record|
    next unless in_flight?(record.scrape_status)

    record.update_columns(scrape_status: nil)
    record.reload
  end

  broadcast_item(item) if broadcast
end

#in_flight?(status) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/source_monitor/scraping/state.rb', line 41

def in_flight?(status)
  IN_FLIGHT_STATUSES.include?(status.to_s)
end

#mark_failed!(item, broadcast: true, lock: true, failed_at: Time.current) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/source_monitor/scraping/state.rb', line 20

def mark_failed!(item, broadcast: true, lock: true, failed_at: Time.current)
  update_status(
    item,
    "failed",
    broadcast:,
    lock:,
    extra: { scraped_at: failed_at || Time.current }
  )
end

#mark_pending!(item, broadcast: false, lock: true) ⇒ Object



12
13
14
# File 'lib/source_monitor/scraping/state.rb', line 12

def mark_pending!(item, broadcast: false, lock: true)
  update_status(item, "pending", broadcast:, lock:)
end

#mark_processing!(item, broadcast: true, lock: true) ⇒ Object



16
17
18
# File 'lib/source_monitor/scraping/state.rb', line 16

def mark_processing!(item, broadcast: true, lock: true)
  update_status(item, "processing", broadcast:, lock:)
end