class Sequent::Configuration
Constants
- DEFAULT_DATABASE_CONFIG_DIRECTORY
- DEFAULT_DATABASE_SCHEMA_DIRECTORY
- DEFAULT_ERROR_LOCALE_RESOLVER
- DEFAULT_EVENT_RECORD_HOOKS_CLASS
- DEFAULT_EVENT_STORE_SCHEMA_NAME
- DEFAULT_MIGRATION_SQL_FILES_DIRECTORY
- DEFAULT_NUMBER_OF_REPLAY_PROCESSES
- DEFAULT_OFFLINE_REPLAY_PERSISTOR_CLASS
- DEFAULT_ONLINE_REPLAY_PERSISTOR_CLASS
- DEFAULT_STRICT_CHECK_ATTRIBUTES_ON_APPLY_EVENTS
- DEFAULT_TIME_PRECISION
- DEFAULT_VERSIONS_TABLE_NAME
- DEFAULT_VIEW_SCHEMA_NAME
- MIGRATIONS_CLASS_NAME
Attributes
aggregate_repository[RW]
command_filters[RW]
command_handlers[RW]
command_middleware[RW]
command_service[RW]
database_config_directory[RW]
database_schema_directory[RW]
disable_event_handlers[RW]
enable_autoregistration[RW]
enable_multiple_database_support[RW]
error_locale_resolver[RW]
event_handlers[RW]
event_publisher[RW]
event_record_class[RW]
event_record_hooks_class[RW]
event_store[RW]
event_store_cache_event_types[RW]
event_store_schema_name[RW]
logger[RW]
migration_sql_files_directory[RW]
migrations_class_name[R]
number_of_replay_processes[RW]
offline_replay_persistor_class[RW]
online_replay_persistor_class[RW]
primary_database_key[RW]
primary_database_role[RW]
snapshot_event_class[RW]
stream_record_class[RW]
strict_check_attributes_on_apply_events[RW]
time_precision[RW]
transaction_provider[RW]
uuid_generator[RW]
versions_table_name[R]
view_schema_name[RW]
Public Class Methods
instance()
click to toggle source
# File lib/sequent/configuration.rb, line 72 def self.instance @instance ||= new end
new()
click to toggle source
# File lib/sequent/configuration.rb, line 87 def initialize self.command_handlers = [] self.command_filters = [] self.event_handlers = [] self.command_middleware = Sequent::Core::Middleware::Chain.new self.aggregate_repository = Sequent::Core::AggregateRepository.new self.event_store_cache_event_types = true self.event_store = Sequent::Core::EventStore.new self.command_service = Sequent::Core::CommandService.new self.event_record_class = Sequent::Core::EventRecord self.stream_record_class = Sequent::Core::StreamRecord self.snapshot_event_class = Sequent::Core::SnapshotEvent self.transaction_provider = Sequent::Core::Transactions::ActiveRecordTransactionProvider.new self.uuid_generator = Sequent::Core::RandomUuidGenerator self.event_publisher = Sequent::Core::EventPublisher.new self.disable_event_handlers = false self.versions_table_name = DEFAULT_VERSIONS_TABLE_NAME self.migration_sql_files_directory = DEFAULT_MIGRATION_SQL_FILES_DIRECTORY self.view_schema_name = DEFAULT_VIEW_SCHEMA_NAME self.event_store_schema_name = DEFAULT_EVENT_STORE_SCHEMA_NAME self.migrations_class_name = MIGRATIONS_CLASS_NAME self.number_of_replay_processes = DEFAULT_NUMBER_OF_REPLAY_PROCESSES self.event_record_hooks_class = DEFAULT_EVENT_RECORD_HOOKS_CLASS self.offline_replay_persistor_class = DEFAULT_OFFLINE_REPLAY_PERSISTOR_CLASS self.online_replay_persistor_class = DEFAULT_ONLINE_REPLAY_PERSISTOR_CLASS self.database_config_directory = DEFAULT_DATABASE_CONFIG_DIRECTORY self.database_schema_directory = DEFAULT_DATABASE_SCHEMA_DIRECTORY self.strict_check_attributes_on_apply_events = DEFAULT_STRICT_CHECK_ATTRIBUTES_ON_APPLY_EVENTS self.logger = Logger.new(STDOUT).tap { |l| l.level = Logger::INFO } self.error_locale_resolver = DEFAULT_ERROR_LOCALE_RESOLVER self.enable_multiple_database_support = false self.primary_database_role = :writing self.primary_database_key = :primary self.time_precision = DEFAULT_TIME_PRECISION self.enable_autoregistration = false end
reset()
click to toggle source
Create a new instance of Configuration
# File lib/sequent/configuration.rb, line 77 def self.reset @instance = new end
restore(configuration)
click to toggle source
Restore the given Configuration
@param configuration [Sequent::Configuration]
# File lib/sequent/configuration.rb, line 83 def self.restore(configuration) @instance = configuration end
Public Instance Methods
autoregister!()
click to toggle source
@!visibility private
# File lib/sequent/configuration.rb, line 152 def autoregister! return unless enable_autoregistration # Only autoregister the AggregateSnapshotter if the autoregistration is enabled Sequent::Core::AggregateSnapshotter.skip_autoregister = false autoload_if_in_rails self.class.instance.command_handlers ||= [] for_each_autoregisterable_descenant_of(Sequent::CommandHandler) do |command_handler_class| Sequent.logger.debug("[Configuration] Autoregistering CommandHandler #{command_handler_class}") self.class.instance.command_handlers << command_handler_class.new end self.class.instance.event_handlers ||= [] for_each_autoregisterable_descenant_of(Sequent::Projector) do |projector_class| Sequent.logger.debug("[Configuration] Autoregistering Projector #{projector_class}") self.class.instance.event_handlers << projector_class.new end for_each_autoregisterable_descenant_of(Sequent::Workflow) do |workflow_class| Sequent.logger.debug("[Configuration] Autoregistering Workflow #{workflow_class}") self.class.instance.event_handlers << workflow_class.new end self.class.instance.command_handlers.map(&:class).tally.each do |(clazz, count)| if count > 1 fail "CommandHandler #{clazz} is registered #{count} times. A CommandHandler can only be registered once" end end self.class.instance.event_handlers.map(&:class).tally.each do |(clazz, count)| if count > 1 fail "EventHandler #{clazz} is registered #{count} times. An EventHandler can only be registered once" end end end
can_use_multiple_databases?()
click to toggle source
# File lib/sequent/configuration.rb, line 131 def can_use_multiple_databases? enable_multiple_database_support && ActiveRecord.version > Gem::Version.new('6.1.0') end
migrations_class_name=(class_name)
click to toggle source
# File lib/sequent/configuration.rb, line 142 def migrations_class_name=(class_name) migration_class = Class.const_get(class_name) unless migration_class <= Sequent::Migrations::Projectors fail ArgumentError, "#{migration_class} must extend Sequent::Migrations::Projectors" end @migrations_class_name = class_name end
versions_table_name=(table_name)
click to toggle source
# File lib/sequent/configuration.rb, line 135 def versions_table_name=(table_name) fail ArgumentError, 'table_name can not be nil' unless table_name @versions_table_name = table_name Sequent::Migrations::Versions.table_name = table_name end
Private Instance Methods
autoload_if_in_rails()
click to toggle source
# File lib/sequent/configuration.rb, line 192 def autoload_if_in_rails Rails.autoloaders.main.eager_load(force: true) if defined?(Rails) && Rails.respond_to?(:autoloaders) end
for_each_autoregisterable_descenant_of(clazz, &block)
click to toggle source
# File lib/sequent/configuration.rb, line 196 def for_each_autoregisterable_descenant_of(clazz, &block) clazz .descendants .reject(&:abstract_class) .reject(&:skip_autoregister) .each(&block) end