Class: Sequent::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/sequent/configuration.rb

Constant Summary collapse

DEFAULT_VERSIONS_TABLE_NAME =
'sequent_versions'
DEFAULT_REPLAYED_IDS_TABLE_NAME =
'sequent_replayed_ids'
DEFAULT_MIGRATION_SQL_FILES_DIRECTORY =
'db/tables'
DEFAULT_DATABASE_CONFIG_DIRECTORY =
'db'
DEFAULT_DATABASE_SCHEMA_DIRECTORY =
'db'
DEFAULT_VIEW_SCHEMA_NAME =
'view_schema'
DEFAULT_EVENT_STORE_SCHEMA_NAME =
'sequent_schema'
MIGRATIONS_CLASS_NAME =
'Sequent::Migrations::Projectors'
DEFAULT_NUMBER_OF_REPLAY_PROCESSES =
4
DEFAULT_OFFLINE_REPLAY_PERSISTOR_CLASS =
Sequent::Core::Persistors::ActiveRecordPersistor
DEFAULT_ONLINE_REPLAY_PERSISTOR_CLASS =
Sequent::Core::Persistors::ActiveRecordPersistor
DEFAULT_EVENT_RECORD_HOOKS_CLASS =
Sequent::Core::EventRecordHooks
DEFAULT_STRICT_CHECK_ATTRIBUTES_ON_APPLY_EVENTS =
false
DEFAULT_ERROR_LOCALE_RESOLVER =
-> { I18n.locale || :en }
DEFAULT_TIME_PRECISION =
ActiveSupport::JSON::Encoding.time_precision

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/sequent/configuration.rb', line 89

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.replayed_ids_table_name = DEFAULT_REPLAYED_IDS_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

Instance Attribute Details

#aggregate_repositoryObject

Returns the value of attribute aggregate_repository.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def aggregate_repository
  @aggregate_repository
end

#command_filtersObject

Returns the value of attribute command_filters.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def command_filters
  @command_filters
end

#command_handlersObject

Returns the value of attribute command_handlers.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def command_handlers
  @command_handlers
end

#command_middlewareObject

Returns the value of attribute command_middleware.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def command_middleware
  @command_middleware
end

#command_serviceObject

Returns the value of attribute command_service.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def command_service
  @command_service
end

#database_config_directoryObject

Returns the value of attribute database_config_directory.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def database_config_directory
  @database_config_directory
end

#database_schema_directoryObject

Returns the value of attribute database_schema_directory.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def database_schema_directory
  @database_schema_directory
end

#disable_event_handlersObject

Returns the value of attribute disable_event_handlers.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def disable_event_handlers
  @disable_event_handlers
end

#enable_autoregistrationObject

Returns the value of attribute enable_autoregistration.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def enable_autoregistration
  @enable_autoregistration
end

#enable_multiple_database_supportObject

Returns the value of attribute enable_multiple_database_support.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def enable_multiple_database_support
  @enable_multiple_database_support
end

#error_locale_resolverObject

Returns the value of attribute error_locale_resolver.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def error_locale_resolver
  @error_locale_resolver
end

#event_handlersObject

Returns the value of attribute event_handlers.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def event_handlers
  @event_handlers
end

#event_publisherObject

Returns the value of attribute event_publisher.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def event_publisher
  @event_publisher
end

#event_record_classObject

Returns the value of attribute event_record_class.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def event_record_class
  @event_record_class
end

#event_record_hooks_classObject

Returns the value of attribute event_record_hooks_class.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def event_record_hooks_class
  @event_record_hooks_class
end

#event_storeObject

Returns the value of attribute event_store.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def event_store
  @event_store
end

#event_store_cache_event_typesObject

Returns the value of attribute event_store_cache_event_types.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def event_store_cache_event_types
  @event_store_cache_event_types
end

#event_store_schema_nameObject

Returns the value of attribute event_store_schema_name.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def event_store_schema_name
  @event_store_schema_name
end

#loggerObject

Returns the value of attribute logger.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def logger
  @logger
end

#migration_sql_files_directoryObject

Returns the value of attribute migration_sql_files_directory.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def migration_sql_files_directory
  @migration_sql_files_directory
end

#migrations_class_nameObject

Returns the value of attribute migrations_class_name.



70
71
72
# File 'lib/sequent/configuration.rb', line 70

def migrations_class_name
  @migrations_class_name
end

#number_of_replay_processesObject

Returns the value of attribute number_of_replay_processes.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def number_of_replay_processes
  @number_of_replay_processes
end

#offline_replay_persistor_classObject

Returns the value of attribute offline_replay_persistor_class.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def offline_replay_persistor_class
  @offline_replay_persistor_class
end

#online_replay_persistor_classObject

Returns the value of attribute online_replay_persistor_class.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def online_replay_persistor_class
  @online_replay_persistor_class
end

#primary_database_keyObject

Returns the value of attribute primary_database_key.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def primary_database_key
  @primary_database_key
end

#primary_database_roleObject

Returns the value of attribute primary_database_role.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def primary_database_role
  @primary_database_role
end

#replayed_ids_table_nameObject

Returns the value of attribute replayed_ids_table_name.



70
71
72
# File 'lib/sequent/configuration.rb', line 70

def replayed_ids_table_name
  @replayed_ids_table_name
end

#snapshot_event_classObject

Returns the value of attribute snapshot_event_class.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def snapshot_event_class
  @snapshot_event_class
end

#stream_record_classObject

Returns the value of attribute stream_record_class.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def stream_record_class
  @stream_record_class
end

#strict_check_attributes_on_apply_eventsObject

Returns the value of attribute strict_check_attributes_on_apply_events.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def strict_check_attributes_on_apply_events
  @strict_check_attributes_on_apply_events
end

#time_precisionObject

Returns the value of attribute time_precision.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def time_precision
  @time_precision
end

#transaction_providerObject

Returns the value of attribute transaction_provider.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def transaction_provider
  @transaction_provider
end

#uuid_generatorObject

Returns the value of attribute uuid_generator.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def uuid_generator
  @uuid_generator
end

#versions_table_nameObject

Returns the value of attribute versions_table_name.



70
71
72
# File 'lib/sequent/configuration.rb', line 70

def versions_table_name
  @versions_table_name
end

#view_schema_nameObject

Returns the value of attribute view_schema_name.



37
38
39
# File 'lib/sequent/configuration.rb', line 37

def view_schema_name
  @view_schema_name
end

Class Method Details

.instanceObject



74
75
76
# File 'lib/sequent/configuration.rb', line 74

def self.instance
  @instance ||= new
end

.resetObject

Create a new instance of Configuration



79
80
81
# File 'lib/sequent/configuration.rb', line 79

def self.reset
  @instance = new
end

.restore(configuration) ⇒ Object

Restore the given Configuration

Parameters:



85
86
87
# File 'lib/sequent/configuration.rb', line 85

def self.restore(configuration)
  @instance = configuration
end

Instance Method Details

#autoregister!Object



161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/sequent/configuration.rb', line 161

def autoregister!
  return unless enable_autoregistration

  # Only autoregister the AggregateSnapshotter if the autoregistration is enabled
  Sequent::Core::AggregateSnapshotter.skip_autoregister = false

  Rails.autoloaders.main.eager_load(force: true) if defined?(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?Boolean

Returns:



134
135
136
# File 'lib/sequent/configuration.rb', line 134

def can_use_multiple_databases?
  enable_multiple_database_support && ActiveRecord.version > Gem::Version.new('6.1.0')
end