Class: Textus::Store::Events

Inherits:
Object
  • Object
show all
Defined in:
lib/textus/store/events.rb

Constant Summary collapse

HOOK_TIMEOUT_SECONDS =
2

Instance Method Summary collapse

Constructor Details

#initialize(store) ⇒ Events

Returns a new instance of Events.



8
9
10
# File 'lib/textus/store/events.rb', line 8

def initialize(store)
  @store = store
end

Instance Method Details

#call(event, **kwargs) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/textus/store/events.rb', line 12

def call(event, **kwargs)
  view = StoreView.new(@store)
  @store.registry.hooks(event).each do |entry|
    name = entry[:name]
    Timeout.timeout(HOOK_TIMEOUT_SECONDS) { entry[:callable].call(store: view, **kwargs) }
  rescue StandardError => e
    extras = { "event" => event.to_s, "hook" => name.to_s, "error" => "#{e.class}: #{e.message}" }
    extras["target_key"]  = kwargs[:target_key]  if kwargs.key?(:target_key)
    extras["pending_key"] = kwargs[:pending_key] if kwargs.key?(:pending_key)
    @store.audit_log.append(
      role: "script", verb: "event_error",
      key: kwargs[:key] || kwargs[:target_key] || kwargs[:pending_key] || "-",
      etag_before: nil, etag_after: nil,
      extras: extras
    )
  end
end