class Sequent::Core::Persistors::ActiveRecordPersistor
The ActiveRecordPersistor
uses ActiveRecord to update the projection
This is the default persistor in Sequent
, but when your event store is growing it is not the best choice as persistor while rebuilding a projection when migrating to a new version of that projection.
Please see the ReplayOptimizedPostgresPersistor
as alternative for migrating projections to a new version.
Public Instance Methods
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 111 def commit # noop end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 51 def create_or_update_record(record_class, values, created_at = Time.now) record = get_record(record_class, values) unless record record = new_record(record_class, values) record.created_at = created_at if record.respond_to?(:created_at) end yield record record.save! record end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 40 def create_record(record_class, values) record = new_record(record_class, values) yield record if block_given? record.save! record end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 47 def create_records(record_class, array_of_value_hashes) record_class.unscoped.insert_all!(array_of_value_hashes, returning: false) end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 70 def delete_all_records(record_class, where_clause) record_class.unscoped.where(where_clause).delete_all end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 74 def delete_record(_, record) record.destroy end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 89 def do_with_record(record_class, where_clause) record = record_class.unscoped.where(where_clause).first! yield record record.save! end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 82 def do_with_records(record_class, where_clause) record_class.unscoped.where(where_clause).each do |record| yield record record.save! end end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 103 def execute_sql(statement) Sequent::ApplicationRecord.connection.execute(statement) end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 95 def find_records(record_class, where_clause) record_class.unscoped.where(where_clause) end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 66 def get_record(record_class, where_clause) record_class.unscoped.where(where_clause).first end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 62 def get_record!(record_class, where_clause) record_class.unscoped.where(where_clause).first! end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 99 def last_record(record_class, where_clause) record_class.unscoped.where(where_clause).last end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 107 def prepare # noop end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 78 def update_all_records(record_class, where_clause, updates) record_class.unscoped.where(where_clause).update_all(updates) end
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 21 def update_record(record_class, event, where_clause = {aggregate_id: event.aggregate_id}, options = {}) record = record_class.unscoped.where(where_clause).first unless record fail(<<~EOS) Record of class #{record_class} with where clause #{where_clause} not found while handling event #{event} EOS end record.updated_at = event.created_at if record.respond_to?(:updated_at) yield record if block_given? update_sequence_number = if options.key?(:update_sequence_number) options[:update_sequence_number] else record.respond_to?(:sequence_number=) end record.sequence_number = event.sequence_number if update_sequence_number record.save! end
Private Instance Methods
Source
# File lib/sequent/core/persistors/active_record_persistor.rb, line 117 def new_record(record_class, values) record_class.unscoped.new(values) end