Grouping actions
Group multiple methods into one execution group via the stage method.
INFO
Usage of the position option for make will sort only in stage.
ruby
stage do
make :create_user!
make :create_blog_for_user!
make :create_post_for_user_blog!
endOption only_if
Checks the only_if condition before calling methods inside stage.
ruby
stage do
only_if ->(context:) { Settings.features.preview.enabled }
make :create_user!
make :create_blog_for_user!
make :create_post_for_user_blog!
endOption only_unless
The opposite of the only_if option.
ruby
stage do
only_unless ->(context:) { Settings.features.preview.disabled }
make :create_user!
make :create_blog_for_user!
make :create_post_for_user_blog!
endOption wrap_in
Wrap methods in stage with a wrapper. Example: ActiveRecord::Base.transaction from Rails.
ruby
stage do
wrap_in ->(methods:, context:) { ActiveRecord::Base.transaction { methods.call } }
make :create_user!
make :create_blog_for_user!
make :create_post_for_user_blog!
endOption rollback
Handle exceptions from methods in the group or from wrap_in via the rollback method.
ruby
stage do
wrap_in ->(methods:, context:) { ActiveRecord::Base.transaction { methods.call } }
rollback :clear_data_and_fail!
make :create_user!
make :create_blog_for_user!
make :create_post_for_user_blog!
end
# ...
def clear_data_and_fail!(e)
# ...
fail!(message: "Failed to create data: #{e.message}")
end