class RubyEventStore::Mappers::Transformation::PreserveTypes
Constants
- DEFAULT_STORE_TYPE
Attributes
registry[R]
Public Class Methods
new(type_resolver: ->(type) { type.to_s }
click to toggle 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
dump(record)
click to toggle 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
load(record)
click to toggle 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
register(type, serializer:, deserializer:, stored_type: DEFAULT_STORE_TYPE)
click to toggle 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
restore_type(argument, type)
click to toggle source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 153 def restore_type(argument, type) case type when Hash restore_types(argument, type) when Array argument.each_with_index.map { |a, idx| restore_type(a, type.fetch(idx)) } else registry.of(type).deserializer[argument] end end
restore_types(argument, types)
click to toggle source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 145 def restore_types(argument, types) argument.each_with_object({}) do |(key, value), hash| key_type, value_type = types.fetch(key.to_sym) { types.fetch(key.to_s) } restored_key = restore_type(key, key_type) hash[restored_key] = restore_type(value, value_type) end end
store_type(argument)
click to toggle source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 134 def store_type(argument) case argument when Hash store_types(argument) when Array argument.map { |i| store_type(i) } else registry.of(argument.class).stored_type[argument] end end
store_types(argument)
click to toggle source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 128 def store_types(argument) argument.each_with_object({}) do |(key, value), hash| hash[transform(key)] = [store_type(key), store_type(value)] end end
transform(argument)
click to toggle source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 117 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
transform_hash(argument)
click to toggle source
# File lib/ruby_event_store/mappers/transformation/preserve_types.rb, line 113 def transform_hash(argument) argument.each_with_object({}) { |(key, value), hash| hash[transform(key)] = transform(value) } end