Module: SourceMonitor::Events
- Defined in:
- lib/source_monitor/events.rb
Defined Under Namespace
Classes: FetchCompletedEvent, ItemCreatedEvent, ItemProcessorContext, ItemScrapedEvent
Class Method Summary
collapse
-
.after_fetch_completed(source:, result:) ⇒ Object
-
.after_item_created(item:, source:, entry:, result:) ⇒ Object
-
.after_item_scraped(result) ⇒ Object
-
.dispatch(event_name, event) ⇒ Object
-
.invoke(callable, event) ⇒ Object
-
.log_handler_error(kind, handler, error) ⇒ Object
-
.run_item_processors(source:, entry:, result:) ⇒ Object
Class Method Details
.after_fetch_completed(source:, result:) ⇒ Object
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/source_monitor/events.rb', line 53
def after_fetch_completed(source:, result:)
event = FetchCompletedEvent.new(
source: source,
result: result,
status: result&.status,
occurred_at: Time.current
)
dispatch(:after_fetch_completed, event)
end
|
.after_item_created(item:, source:, entry:, result:) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/source_monitor/events.rb', line 25
def after_item_created(item:, source:, entry:, result:)
event = ItemCreatedEvent.new(
item: item,
source: source,
entry: entry,
result: result,
status: result&.status,
occurred_at: Time.current
)
dispatch(:after_item_created, event)
end
|
.after_item_scraped(result) ⇒ Object
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/source_monitor/events.rb', line 38
def after_item_scraped(result)
item = result&.item
source = item&.source
event = ItemScrapedEvent.new(
item: item,
source: source,
result: result,
log: result&.log,
status: result&.status,
occurred_at: Time.current
)
dispatch(:after_item_scraped, event)
end
|
.dispatch(event_name, event) ⇒ Object
82
83
84
85
86
87
88
|
# File 'lib/source_monitor/events.rb', line 82
def dispatch(event_name, event)
SourceMonitor.config.events.callbacks_for(event_name).each do |callback|
invoke(callback, event)
rescue StandardError => error
log_handler_error(event_name, callback, error)
end
end
|
.invoke(callable, event) ⇒ Object
90
91
92
93
94
95
96
|
# File 'lib/source_monitor/events.rb', line 90
def invoke(callable, event)
if callable.respond_to?(:arity) && callable.arity.zero?
callable.call
else
callable.call(event)
end
end
|
.log_handler_error(kind, handler, error) ⇒ Object
98
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/source_monitor/events.rb', line 98
def log_handler_error(kind, handler, error)
message = "[SourceMonitor] #{kind} handler #{handler.inspect} failed: #{error.class}: #{error.message}"
if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
Rails.logger.error(message)
else
warn(message)
end
rescue StandardError
warn(message)
end
|
.run_item_processors(source:, entry:, result:) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/source_monitor/events.rb', line 64
def run_item_processors(source:, entry:, result:)
item = result&.item
context = ItemProcessorContext.new(
item: item,
source: source,
entry: entry,
result: result,
status: result&.status,
occurred_at: Time.current
)
SourceMonitor.config.events.item_processors.each do |processor|
invoke(processor, context)
rescue StandardError => error
log_handler_error(:item_processor, processor, error)
end
end
|