Migrating custom components from v1.x to v2.x
Event
metadata[:timestamp],metadata[:valid_at]are now alwaysTimeobjects, no parsing needed regardless of chosen serialization of metadata
Repository
-
take serializer as an argument in
initializedef initialize(serializer)@serializer = serializerend -
serialize records before appending to stream with
RubyEventStore::Record#serializedef append_to_stream(records, stream, expected_version)serialized_records = records.map { |record| record.serialize(@serializer) }# ...end -
deserialize serialized records before returning them from read operations with
RubyEventStore::SerializedRecord#deserializedef last_stream_event(stream)# ...serialized_record = ...serialized_record.deserialize(serializer) if serialized_recordenddef read(spec)serialized_records =...if spec.batched?batch_reader = ->(offset, limit) doserialized_records.drop(offset).take(limit).map { |serialized_record| serialized_record.deserialize(serializer) }endBatchEnumerator.new(spec.batch_size, serialized_records.size, batch_reader).eachelsif spec.first?serialized_records.first&.deserialize(serializer)elsif spec.last?serialized_records.last&.deserialize(serializer)elseEnumerator.new do |y|serialized_records.each { |serialized_record| y << serialized_record.deserialize(serializer) }endendend
Scheduler
-
take serializer as an argument in
initialize -
serialize records before scheduling with
RubyEventStore::Record#serializemodule RailsEventStoreclass ActiveJobSchedulerdef initialize(serializer:)@serializer = serializerenddef call(klass, record)klass.perform_later(record.serialize(@serializer).to_h)endendend
AsyncHandler
-
pass
serializer:toevent_store.deserializeEither directly:
class SendOrderEmail < ActiveJob::Basedef perform(payload)event = event_store.deserialize(**payload.symbolize_keys, serializer: ...)email = event.data.fetch(:customer_email)OrderMailer.notify_customer(email).deliver_now!endendOr via
RailsEventStore::AsyncHandler.withmodule:class SendOrderEmail < ActiveJob::Baseprepend RailsEventStore::AsyncHandler.with(serializer: ...)def perform(event)email = event.data.fetch(:customer_email)OrderMailer.notify_customer(email).deliver_now!endend
Mapper
PipelineMapper
-
remove
RubyEventStore::Mappers::Transformation::Serialization.new(serializer: serializer)transformation step from your pipeline inRubyEventStore::Mappers::PipelineMapper -
inline
RubyEventStore::Mappers::Pipeline.new(transformations: transformations)toRubyEventStore::Mappers::Pipeline.new(*transformations) -
replace
RubyEventStore::Mappers::Transformation::ItemwithRubyEventStore::Record
Mapper
-
rename
event_to_serialized_recordtoevent_to_record -
rename
serialized_record_to_eventtorecord_to_event -
replace
RubyEventStore::SerializedRecordwithRubyEventStore::Record,timestampandvalid_atattributes are ofTimekind