Module: TransactionalOutbox::Event::Contextable

Included in:
TransactionalOutbox::Event
Defined in:
lib/transactional_outbox/event/contextable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(klass) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/transactional_outbox/event/contextable.rb', line 6

def self.extended(klass)
  klass.define_method(:validate_context!) do |params|
    ctx_schema = self.class.instance_variable_get(:@__context_schema__)

    return true unless ctx_schema

    result = ctx_schema.call(params)

    self.class.check_context_validation_result!(result)
  end
end

Instance Method Details

#check_context_validation_result!(result) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/transactional_outbox/event/contextable.rb', line 18

def check_context_validation_result!(result)
  return true if result.success?

  errors = result.message_set.messages.map do |message|
    "#{message.path.join("->")} #{message.text}"
  end.join(", ")

  raise TransactionalOutbox::InvalidContextError, "Invalid context error: #{errors}"
end

#context(&block) ⇒ Object



28
29
30
# File 'lib/transactional_outbox/event/contextable.rb', line 28

def context(&block)
  @__context_schema__ ||= Class.new(Dry::Validation::Contract).class_exec { params(&block) } if block
end