class RubyEventStore::Mappers::Transformation::PreserveTypes
Constants
- DEFAULT_STORE_TYPE
Attributes
Public Class Methods
Source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 7 def initialize(type_resolver: ->(type) { type.to_s }) @registry = Registry.new(type_resolver) end
Public Instance Methods
Source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 68 def dump(record) data = transform(record.data) metadata = transform(record.metadata) if (metadata.respond_to?(:[]=)) metadata[:types] = { data: store_type(record.data), metadata: store_type(record.metadata) } end Record.new( event_id: record.event_id, event_type: record.event_type, data: data, metadata: metadata, timestamp: record.timestamp, valid_at: record.valid_at, ) end
Source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 85 def load(record) types = begin record.metadata.delete(:types) rescue StandardError nil end data_types = types&.fetch(:data, nil) metadata_types = types&.fetch(:metadata, nil) data = restore_type(record.data, data_types) metadata = restore_type(record.metadata, metadata_types) Record.new( event_id: record.event_id, event_type: record.event_type, data: data, metadata: metadata, timestamp: record.timestamp, valid_at: record.valid_at, ) end
Source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 63 def register(type, serializer:, deserializer:, stored_type: DEFAULT_STORE_TYPE) registry.add(type, serializer, deserializer, stored_type) self end
Private Instance Methods
Source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 142 def restore_type(argument, type) case type when Hash argument.reduce({}) do |hash, (key, value)| key_type, value_type = type.fetch(key.to_sym) { type.fetch(key) } hash.merge(restore_type(key, key_type) => restore_type(value, value_type)) end when Array argument.each_with_index.map { |a, idx| restore_type(a, type.fetch(idx)) } else registry.of(type).deserializer[argument] end end
Source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 129 def store_type(argument) case argument when Hash argument.reduce({}) do |hash, (key, value)| hash.merge(transform(key) => [store_type(key), store_type(value)]) end when Array argument.map { |i| store_type(i) } else registry.of(argument.class).stored_type[argument] end end
Source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 118 def transform(argument) case argument when Hash transform_hash(argument) when Array argument.map { |i| transform(i) } else registry.of(argument.class).serializer[argument] end end
Source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 114 def transform_hash(argument) argument.each_with_object({}) { |(key, value), hash| hash[transform(key)] = transform(value) } end