Sha256: b83bbb0eb83f9ce20a739f49c3f76e1819246d14474f944fac9b620de21810ab

Contents?: true

Size: 1.34 KB

Versions: 9

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

module PgEventstore
  # @!visibility private
  class PgResultDeserializer
    attr_reader :middlewares, :event_class_resolver

    # @param middlewares [Array<Object<#deserialize, #serialize>>]
    # @param event_class_resolver [#call]
    def initialize(middlewares, event_class_resolver)
      @middlewares = middlewares
      @event_class_resolver = event_class_resolver
    end

    # @param pg_result [PG::Result]
    # @return [Array<PgEventstore::Event>]
    def deserialize(pg_result)
      pg_result.map(&method(:_deserialize))
    end
    alias deserialize_many deserialize

    # @param pg_result [PG::Result]
    # @return [PgEventstore::Event, nil]
    def deserialize_one(pg_result)
      return if pg_result.ntuples.zero?

      _deserialize(pg_result.first)
    end

    # @return [PgEventstore::PgResultDeserializer]
    def without_middlewares
      self.class.new([], event_class_resolver)
    end

    private

    # @param attrs [Hash]
    # @return [PgEventstore::Event]
    def _deserialize(attrs)
      event = event_class_resolver.call(attrs['type']).new(**attrs.transform_keys(&:to_sym))
      middlewares.each do |middleware|
        middleware.deserialize(event)
      end
      event.stream = PgEventstore::Stream.new(**attrs['stream'].transform_keys(&:to_sym)) if attrs.key?('stream')
      event
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
pg_eventstore-0.3.0 lib/pg_eventstore/pg_result_deserializer.rb
pg_eventstore-0.2.6 lib/pg_eventstore/pg_result_deserializer.rb
pg_eventstore-0.2.5 lib/pg_eventstore/pg_result_deserializer.rb
pg_eventstore-0.2.4 lib/pg_eventstore/pg_result_deserializer.rb
pg_eventstore-0.2.3 lib/pg_eventstore/pg_result_deserializer.rb
pg_eventstore-0.2.2 lib/pg_eventstore/pg_result_deserializer.rb
pg_eventstore-0.2.1 lib/pg_eventstore/pg_result_deserializer.rb
pg_eventstore-0.2.0 lib/pg_eventstore/pg_result_deserializer.rb
pg_eventstore-0.1.0 lib/pg_eventstore/pg_result_deserializer.rb