arkency/rails_event_store

View on GitHub
ruby_event_store/lib/ruby_event_store/mappers/pipeline.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module RubyEventStore
  module Mappers
    class Pipeline
      def initialize(*transformations, to_domain_event: Transformation::DomainEvent.new)
        @transformations = [to_domain_event, transformations].flatten.freeze
      end

      def dump(event)
        transformations.reduce(event) { |item, transform| transform.dump(item) }
      end

      def load(record)
        transformations.reverse.reduce(record) { |item, transform| transform.load(item) }
      end

      attr_reader :transformations
    end
  end
end