Skip to content

Commit 2bed49c

Browse files
fidellukaszreszke
andcommitted
JSONClient can now preserve OpenStruct type
Until now, OpenStruct in data (or metadata) would be serialized to String. E.g. `#<OpenStruct a=1>` and returned in such form after reading the event since no deserialization would occur. Co-authored-by: Łukasz Reszke <[email protected]>
1 parent 37ea9aa commit 2bed49c

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

rails_event_store/lib/rails_event_store/json_client.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ def initialize(
2222
)
2323
.register(Date, serializer: ->(v) { v.iso8601 }, deserializer: ->(v) { Date.iso8601(v) })
2424
.register(DateTime, serializer: ->(v) { v.iso8601 }, deserializer: ->(v) { DateTime.iso8601(v) })
25-
.register(BigDecimal, serializer: ->(v) { v.to_s }, deserializer: ->(v) { BigDecimal(v) }),
25+
.register(BigDecimal, serializer: ->(v) { v.to_s }, deserializer: ->(v) { BigDecimal(v) })
26+
.register(OpenStruct, serializer: ->(v) { v.to_h }, deserializer: ->(v) { OpenStruct.new(v) }),
2627
RubyEventStore::Mappers::Transformation::SymbolizeMetadataKeys.new
2728
)
2829
),

rails_event_store/spec/json_client_spec.rb

+7
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ module RailsEventStore
6464
expect(client.read.event(event.event_id)).to eq(event)
6565
end
6666

67+
specify "reads type of OpenStruct" do
68+
event = DummyEvent.new(data: OpenStruct.new(a: 1))
69+
client.append(event)
70+
71+
expect(client.read.event(event.event_id)).to eq(event)
72+
end
73+
6774
private
6875

6976
def with_precision(time)

0 commit comments

Comments
 (0)