Class: EventSourcery::EventBodySerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/event_sourcery/event_body_serializer.rb

Overview

EventBodySerializer is used for serializing event bodies when persisting events.

Defined Under Namespace

Modules: ArraySerializer, HashSerializer, IdentitySerializer

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeEventBodySerializer

Returns a new instance of EventBodySerializer.



13
14
15
# File 'lib/event_sourcery/event_body_serializer.rb', line 13

def initialize
  @serializers = Hash.new(IdentitySerializer)
end

Class Method Details

.serialize(event_body, serializer: EventSourcery.config.event_body_serializer) ⇒ Object

Serialize the given event body, with the default or the provided, serializer

Parameters:

  • event_body

    event body to be serialized

  • serializer (defaults to: EventSourcery.config.event_body_serializer)

    Optional. Serializer to be used. By default EventSourcery.config.event_body_serializer will be used.



8
9
10
11
# File 'lib/event_sourcery/event_body_serializer.rb', line 8

def self.serialize(event_body,
                   serializer: EventSourcery.config.event_body_serializer)
  serializer.serialize(event_body)
end

Instance Method Details

#add(type, serializer = nil, &block_serializer) ⇒ Object

Register a serializer (instance or block) for the specified type

Parameters:

  • type

    The type for which the provided serializer will be used for

  • serializer (defaults to: nil)

    Optional. A serializer instance for the given type

  • block_serializer (Proc)

    Optional. A block that performs the serialization



22
23
24
25
# File 'lib/event_sourcery/event_body_serializer.rb', line 22

def add(type, serializer = nil, &block_serializer)
  @serializers[type] = serializer || block_serializer
  self
end

#serialize(object) ⇒ Object

Serialize the given event body

Parameters:

  • object

    event body to be serialized



30
31
32
33
# File 'lib/event_sourcery/event_body_serializer.rb', line 30

def serialize(object)
  serializer = @serializers[object.class]
  serializer.call(object, &method(:serialize))
end