Skip to content

Commit 3d91107

Browse files
committed
Mapper detects Hash vs Record and handles them correctly.
1 parent edc3e82 commit 3d91107

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

rails_application/lib/transformations/refund_to_return_event_mapper.rb

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,29 @@ def dump(record)
99
end
1010

1111
def load(record)
12-
return record unless record.respond_to?(:timestamp) && record.timestamp
12+
if record.is_a?(Hash)
13+
old_class_name = record[:event_type]
14+
else
15+
old_class_name = record.event_type
16+
end
1317

14-
old_class_name = record.event_type
1518
new_class_name = @class_map.fetch(old_class_name, old_class_name)
16-
19+
1720
if old_class_name != new_class_name
18-
transformed_data = transform_payload(record.data, old_class_name)
19-
20-
record.class.new(
21-
event_id: record.event_id,
22-
event_type: new_class_name,
23-
data: transformed_data,
24-
metadata: record.metadata,
25-
timestamp: record.timestamp,
26-
valid_at: record.valid_at
27-
)
21+
if record.is_a?(Hash)
22+
transformed_data = transform_payload(record[:data], old_class_name)
23+
record.merge(event_type: new_class_name, data: transformed_data)
24+
else
25+
transformed_data = transform_payload(record.data, old_class_name)
26+
record.class.new(
27+
event_id: record.event_id,
28+
event_type: new_class_name,
29+
data: transformed_data,
30+
metadata: record.metadata,
31+
timestamp: record.timestamp,
32+
valid_at: record.valid_at
33+
)
34+
end
2835
else
2936
record
3037
end

rails_application/test/transformations/refund_to_return_event_mapper_test.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,18 +125,18 @@ def test_event_store_with_simple_transformation
125125
return_id = SecureRandom.uuid
126126
order_id = SecureRandom.uuid
127127

128-
old_event = Ordering::ItemAddedToRefund.new(
128+
old_event = Ordering::ItemAddedToReturn.new(
129129
data: {
130-
refund_id: return_id,
131-
order_id: order_id,
130+
return_id: return_id,
131+
order_id: order_id,
132132
product_id: SecureRandom.uuid
133133
}
134134
)
135135

136136
event_store.publish(old_event, stream_name: "Return$#{return_id}")
137137

138138
events = event_store.read.stream("Return$#{return_id}").to_a
139-
139+
140140
assert_equal 1, events.size
141141
assert_equal 'Ordering::ItemAddedToReturn', events.first.class.name
142142
assert_equal return_id, events.first.data[:return_id]

0 commit comments

Comments
 (0)