Class: OmniService::Transaction

Inherits:
Object
  • Object
show all
Extended by:
Dry::Initializer
Includes:
Strict
Defined in:
lib/omni_service/transaction.rb

Overview

Wraps component execution in a database transaction with callback support. Rolls back on failure; executes on_success callbacks after commit, on_failure after rollback.

Callbacks run asynchronously by default (configurable via OmniService.with_sync_callbacks). on_success callbacks receive the same params and context as the main component. on_failure callbacks receive the failed Result as their first param.

Examples:

Post creation with notifications

transaction(
  sequence(validate_params, create_post),
  on_success: [send_notifications, update_feed],
  on_failure: [log_failure, alert_admin]
)

Nested transactions

transaction(
  sequence(
    create_post,
    transaction(create_comments, on_success: [notify_commenters])
  ),
  on_success: [notify_author]
)

Defined Under Namespace

Classes: Halt

Instance Method Summary collapse

Methods included from Strict

#call!

Instance Method Details

#call(*params, **context) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/omni_service/transaction.rb', line 48

def call(*params, **context)
  result = call_transaction(*params, **context).merge(operation: self)

  return result if result.success?

  on_failure_results = on_failure_callbacks.map { |callback| callback.call(result) }
  result.merge(on_failure: result.on_failure + on_failure_results)
end

#signatureObject



57
58
59
# File 'lib/omni_service/transaction.rb', line 57

def signature
  @signature ||= [component_wrapper.signature.first, true]
end