class Synapse::Configuration::LockingRepositoryDefinitionBuilder

Definition builder that serves a base for building specific implementations of a locking repository

@abstract @see EventSourcingRepositoryDefinitionBuilder @see SimpleRepositoryDefinitionBuilder

Public Instance Methods

use_event_bus(event_bus) click to toggle source

Changes the event bus used to publish aggregate events to

@see EventBus::EventBus @param [Symbol] event_bus @return [undefined]

# File lib/synapse/configuration/component/repository/locking_repository.rb, line 15
def use_event_bus(event_bus)
  @event_bus = event_bus
end
use_lock_manager(lock_manager) click to toggle source

Changes the lock manager used to prevent concurrent aggregate modification

@see Repository::LockManager @param [Symbol] lock_manager @return [undefined]

# File lib/synapse/configuration/component/repository/locking_repository.rb, line 48
def use_lock_manager(lock_manager)
  @lock_manager = lock_manager
end
use_no_locking() click to toggle source

Uses the lock manager with no locking

@see Repository::NullLockManager @return [undefined]

# File lib/synapse/configuration/component/repository/locking_repository.rb, line 23
def use_no_locking
  @lock_manager_type = Repository::NullLockManager
end
use_optimistic_locking() click to toggle source

Uses the lock manager with optimistic locking

@see Repository::OptimisticLockManager @return [undefined]

# File lib/synapse/configuration/component/repository/locking_repository.rb, line 39
def use_optimistic_locking
  @lock_manager_type = Repository::OptimisticLockManager
end
use_pessimistic_locking() click to toggle source

Uses the lock manager with pessimistic locking

@see Repository::PessimisticLockManager @return [undefined]

# File lib/synapse/configuration/component/repository/locking_repository.rb, line 31
def use_pessimistic_locking
  @lock_manager_type = Repository::PessimisticLockManager
end
use_unit_provider(unit_provider) click to toggle source

Changes the provider used to get the current unit of work

@see UnitOfWork::UnitOfWorkProvider @param [Symbol] unit_provider @return [undefined]

# File lib/synapse/configuration/component/repository/locking_repository.rb, line 57
def use_unit_provider(unit_provider)
  @unit_provider = unit_provider
end

Protected Instance Methods

build_lock_manager() click to toggle source

@raise [RuntimeError] If no lock manager was configured @return [LockManager]

# File lib/synapse/configuration/component/repository/locking_repository.rb, line 72
def build_lock_manager
  if @lock_manager
    resolve @lock_manager
  elsif @lock_manager_type
    @lock_manager_type.new
  else
    raise 'No lock manager was configured for this repository'
  end
end
inject_base_dependencies(repository) click to toggle source

Injects the dependencies required by the base repository class

@param [Repository] repository @return [Repository]

# File lib/synapse/configuration/component/repository/locking_repository.rb, line 86
def inject_base_dependencies(repository)
  repository.event_bus = resolve @event_bus
  repository.unit_provider = resolve @unit_provider

  repository
end
populate_defaults() click to toggle source

@return [undefined]

# File lib/synapse/configuration/component/repository/locking_repository.rb, line 64
def populate_defaults
  use_event_bus :event_bus
  use_pessimistic_locking
  use_unit_provider :unit_provider
end