Class: SolidObjects::DeadLetterManager

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_objects/dead_letter_manager.rb,
sig/generated/lib/solid_objects/dead_letter_manager.rbs

Instance Method Summary collapse

Instance Method Details

#all(authorization_context: nil) ⇒ ActiveRecord::Relation[DeadLetter]

RBS:

  • (?authorization_context: untyped) -> ActiveRecord::Relation[DeadLetter]

Parameters:

  • authorization_context: (Object) (defaults to: nil)

Returns:



6
7
8
9
# File 'lib/solid_objects/dead_letter_manager.rb', line 6

def all(authorization_context: nil)
  authorize!(:inspect, authorization_context:)
  DeadLetter.order(last_failed_at: :desc, id: :desc)
end

#authorize!(action, authorization_context:, dead_letter_id: nil) ⇒ void

This method returns an undefined value.

RBS:

  • (Symbol, authorization_context: untyped, ?dead_letter_id: Integer?) -> void

Parameters:

  • (Symbol)
  • authorization_context: (Object)
  • dead_letter_id: (Integer, nil) (defaults to: nil)


35
36
37
38
39
40
41
42
43
44
45
# File 'lib/solid_objects/dead_letter_manager.rb', line 35

def authorize!(action, authorization_context:, dead_letter_id: nil)
  authorized = SolidObjects.configuration.authorize_administration.call(
    action: action.to_s,
    resource: "dead_letters",
    resource_id: dead_letter_id,
    authorization_context:
  )
  return if authorized

  raise Unauthorized, "actor administration is not authorized"
end

#retry(dead_letter_id, authorization_context: nil) ⇒ MessageReference

RBS:

  • (Integer, ?authorization_context: untyped) -> MessageReference

Parameters:

  • (Integer)
  • authorization_context: (Object) (defaults to: nil)

Returns:



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/solid_objects/dead_letter_manager.rb', line 12

def retry(dead_letter_id, authorization_context: nil)
  authorize!(:retry, authorization_context:, dead_letter_id:)
  dead_letter = DeadLetter.find(dead_letter_id)
  return MessageReference.from_message(Message.find(dead_letter.retried_message_id)) if dead_letter.retried_message_id

  original_message = dead_letter.message
  message_reference = Mailbox.new.enqueue(
    Reference.new(
      actor_type: dead_letter.actor_type,
      actor_id: dead_letter.actor_id
    ),
    dead_letter.message_name,
    dead_letter.arguments,
    kind: original_message.message_kind,
    idempotency_key: "dead-letter:#{dead_letter.id}"
  )
  dead_letter.update!(retried_message_id: message_reference.id)
  message_reference
end