Module: SourceMonitor::Scraping::State
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
- #clear_inflight!(item, broadcast: true, lock: true) ⇒ Object
- #in_flight?(status) ⇒ Boolean
- #mark_failed!(item, broadcast: true, lock: true, failed_at: Time.current) ⇒ Object
- #mark_pending!(item, broadcast: false, lock: true) ⇒ Object
- #mark_processing!(item, broadcast: true, lock: true) ⇒ Object
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
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 |