RailsEventStore/rails_event_store

View on GitHub
ruby_event_store/lib/ruby_event_store/mappers/transformation/upcast.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module RubyEventStore
  module Mappers
    module Transformation
      class Upcast
        class RecordUpcaster
          def initialize(upcast_map)
            @upcast_map = upcast_map
          end

          def call(record)
            identity = lambda { |r| r }
            new_record = @upcast_map.fetch(record.event_type, identity)[record]
            new_record.equal?(record) ? record : call(new_record)
          end
        end

        def initialize(upcast_map)
          @record_upcaster = RecordUpcaster.new(upcast_map)
        end

        def dump(record)
          record
        end

        def load(record)
          @record_upcaster.call(record)
        end
      end
    end
  end
end