Skip to content

Commit 6071ccc

Browse files
committed
Add a transformation to ensure payload keys being transformed to symbols.
1 parent d5b127c commit 6071ccc

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

infra/lib/infra/event_store.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ module Infra
22
class EventStore < SimpleDelegator
33
def self.main
44
require_relative "../../../rails_application/lib/transformations/refund_to_return_event_mapper" rescue nil
5+
require_relative "../../../rails_application/lib/transformations/symbolize_data_keys" rescue nil
56

67
begin
78
mapper = RubyEventStore::Mappers::PipelineMapper.new(
@@ -11,8 +12,8 @@ def self.main
1112
'Ordering::ItemAddedToRefund' => 'Ordering::ItemAddedToReturn',
1213
'Ordering::ItemRemovedFromRefund' => 'Ordering::ItemRemovedFromReturn'
1314
),
14-
RubyEventStore::Mappers::Transformation::SymbolizeMetadataKeys.new,
15-
RubyEventStore::Mappers::Transformation::PreserveTypes.new
15+
Transformations::SymbolizeDataKeys.new,
16+
RubyEventStore::Mappers::Transformation::SymbolizeMetadataKeys.new
1617
)
1718
)
1819
client = RailsEventStore::JSONClient.new(mapper: mapper)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
module Transformations
2+
class SymbolizeDataKeys
3+
def dump(record)
4+
record
5+
end
6+
7+
def load(record)
8+
return record unless record.respond_to?(:data)
9+
10+
symbolized_data = symbolize_keys(record.data)
11+
12+
if record.respond_to?(:dup)
13+
new_record = record.dup
14+
new_record.instance_variable_set(:@data, symbolized_data) if new_record.instance_variable_defined?(:@data)
15+
new_record
16+
else
17+
record
18+
end
19+
end
20+
21+
private
22+
23+
def symbolize_keys(hash)
24+
case hash
25+
when Hash
26+
hash.transform_keys(&:to_sym).transform_values { |v| symbolize_keys(v) }
27+
when Array
28+
hash.map { |v| symbolize_keys(v) }
29+
else
30+
hash
31+
end
32+
end
33+
end
34+
end

0 commit comments

Comments
 (0)