Module: BetterService::Concerns::Serviceable::Transactional

Extended by:
ActiveSupport::Concern
Included in:
Services::Base
Defined in:
lib/better_service/concerns/serviceable/transactional.rb

Overview

Provides transaction wrapping for service execution

This concern is PREPENDED (not included) to Services::Base to wrap the process method in a database transaction when enabled.

Examples:

Enable transactions in a service

class Booking::CreateService < BetterService::CreateService
  with_transaction true
end

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.prepended(base) ⇒ Object

Hook for prepend - sets up class attributes and class methods



19
20
21
22
# File 'lib/better_service/concerns/serviceable/transactional.rb', line 19

def self.prepended(base)
  base.class_attribute :_with_transaction, default: false
  base.extend(ClassMethods)
end

Instance Method Details

#process(data) ⇒ Object

Override process to wrap in transaction if enabled



44
45
46
47
48
49
50
51
52
# File 'lib/better_service/concerns/serviceable/transactional.rb', line 44

def process(data)
  return super(data) unless self.class._with_transaction

  result = nil
  ActiveRecord::Base.transaction do
    result = super(data)
  end
  result
end