Class: Sequent::Core::Persistors::ActiveRecordPersistor
- Inherits:
-
Object
- Object
- Sequent::Core::Persistors::ActiveRecordPersistor
- Includes:
- Persistor
- Defined in:
- lib/sequent/core/persistors/active_record_persistor.rb
Overview
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.
Instance Method Summary collapse
- #commit ⇒ Object
- #create_or_update_record(record_class, values, created_at = Time.now) {|record| ... } ⇒ Object
- #create_record(record_class, values) {|record| ... } ⇒ Object
- #create_records(record_class, array_of_value_hashes) ⇒ Object
- #delete_all_records(record_class, where_clause) ⇒ Object
- #delete_record(_, record) ⇒ Object
- #do_with_record(record_class, where_clause) {|record| ... } ⇒ Object
- #do_with_records(record_class, where_clause) ⇒ Object
- #execute_sql(statement) ⇒ Object
- #find_records(record_class, where_clause) ⇒ Object
- #get_record(record_class, where_clause) ⇒ Object
- #get_record!(record_class, where_clause) ⇒ Object
- #last_record(record_class, where_clause) ⇒ Object
- #prepare ⇒ Object
- #update_all_records(record_class, where_clause, updates) ⇒ Object
- #update_record(record_class, event, where_clause = {aggregate_id: event.aggregate_id}, options = {}) {|record| ... } ⇒ Object
Instance Method Details
#commit ⇒ Object
111 112 113 |
# File 'lib/sequent/core/persistors/active_record_persistor.rb', line 111 def commit # noop end |
#create_or_update_record(record_class, values, created_at = Time.now) {|record| ... } ⇒ Object
51 52 53 54 55 56 57 58 59 60 |
# 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 |
#create_record(record_class, values) {|record| ... } ⇒ Object
40 41 42 43 44 45 |
# 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 |
#create_records(record_class, array_of_value_hashes) ⇒ Object
47 48 49 |
# 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 |
#delete_all_records(record_class, where_clause) ⇒ Object
70 71 72 |
# 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 |
#delete_record(_, record) ⇒ Object
74 75 76 |
# File 'lib/sequent/core/persistors/active_record_persistor.rb', line 74 def delete_record(_, record) record.destroy end |
#do_with_record(record_class, where_clause) {|record| ... } ⇒ Object
89 90 91 92 93 |
# 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 |
#do_with_records(record_class, where_clause) ⇒ Object
82 83 84 85 86 87 |
# 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 |
#execute_sql(statement) ⇒ Object
103 104 105 |
# File 'lib/sequent/core/persistors/active_record_persistor.rb', line 103 def execute_sql(statement) Sequent::ApplicationRecord.connection.execute(statement) end |
#find_records(record_class, where_clause) ⇒ Object
95 96 97 |
# 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 |
#get_record(record_class, where_clause) ⇒ Object
66 67 68 |
# 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 |
#get_record!(record_class, where_clause) ⇒ Object
62 63 64 |
# 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 |
#last_record(record_class, where_clause) ⇒ Object
99 100 101 |
# 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 |
#prepare ⇒ Object
107 108 109 |
# File 'lib/sequent/core/persistors/active_record_persistor.rb', line 107 def prepare # noop end |
#update_all_records(record_class, where_clause, updates) ⇒ Object
78 79 80 |
# 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 |
#update_record(record_class, event, where_clause = {aggregate_id: event.aggregate_id}, options = {}) {|record| ... } ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/sequent/core/persistors/active_record_persistor.rb', line 21 def update_record(record_class, event, where_clause = {aggregate_id: event.aggregate_id}, = {}) 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 .key?(:update_sequence_number) [:update_sequence_number] else record.respond_to?(:sequence_number=) end record.sequence_number = event.sequence_number if update_sequence_number record.save! end |