Module: Dry::Operation::Extensions::Sequel
- Defined in:
- lib/dry/operation/extensions/sequel.rb
Overview
Add Sequel transaction support to operations
When this extension is included, you can use a ‘#transaction` method to wrap the desired steps in a Sequel transaction. If any of the steps returns a `Dry::Monads::Result::Failure`, the transaction will be rolled back and, as usual, the rest of the flow will be skipped.
The extension expects the including class to give access to the Sequel database object via a ‘#db` method.
“‘ruby class MyOperation < Dry::Operation
include Dry::Operation::Extensions::Sequel
attr_reader :db
def initialize(db:)
@db = db
end
def call(input)
attrs = step validate(input)
user = transaction do
new_user = step persist(attrs)
step assign_initial_role(new_user)
new_user
end
step notify(user)
user
end
# ...
end “‘
By default, no options are passed to the Sequel transaction. You can change this when including the extension:
“‘ruby include Dry::Operation::Extensions::Sequel[isolation: :serializable] “`
Or you can change it at runtime:
“‘ruby transaction(isolation: :serializable) do
# ...
end “‘
WARNING: Be aware that the ‘:savepoint` option is not yet supported.
Defined Under Namespace
Classes: Builder
Class Method Summary collapse
-
.[](options = {}) ⇒ Object
Include the extension providing default options for the transaction.
- .included(klass) ⇒ Object
Class Method Details
.[](options = {}) ⇒ Object
Include the extension providing default options for the transaction.
73 74 75 |
# File 'lib/dry/operation/extensions/sequel.rb', line 73 def self.[]( = {}) Builder.new(**) end |
.included(klass) ⇒ Object
66 67 68 |
# File 'lib/dry/operation/extensions/sequel.rb', line 66 def self.included(klass) klass.include(self[]) end |