From b5bdc5928253d7fa198951ee10a4e640e3a5cf6c Mon Sep 17 00:00:00 2001 From: Rob Holland Date: Mon, 1 Mar 2021 09:37:57 +0000 Subject: [PATCH] Escape UTF-8 characters that are not ASCII-8BIT safe. Fixes Encoding::UndefinedConversionError errors for some UTF characters. --- lib/temporal/client/serializer/payload.rb | 2 +- .../lib/temporal/client/serializer/payload_spec.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 spec/unit/lib/temporal/client/serializer/payload_spec.rb diff --git a/lib/temporal/client/serializer/payload.rb b/lib/temporal/client/serializer/payload.rb index e410ce15..8ea486d4 100644 --- a/lib/temporal/client/serializer/payload.rb +++ b/lib/temporal/client/serializer/payload.rb @@ -21,7 +21,7 @@ def to_proto payloads: [ Temporal::Api::Common::V1::Payload.new( metadata: { 'encoding' => JSON_ENCODING }, - data: JSON.serialize(object) + data: JSON.serialize(object).b ) ] ) diff --git a/spec/unit/lib/temporal/client/serializer/payload_spec.rb b/spec/unit/lib/temporal/client/serializer/payload_spec.rb new file mode 100644 index 00000000..34874d62 --- /dev/null +++ b/spec/unit/lib/temporal/client/serializer/payload_spec.rb @@ -0,0 +1,13 @@ +require 'temporal/client/serializer/payload' + +describe Temporal::Client::Serializer::Payload do + let(:hash) { { 'one' => 'one', two: :two, ':three' => '☻' } } + + describe 'round trip' do + it 'safely handles non-ASCII encodable UTF characters' do + expect( + described_class.from_proto(described_class.new(hash).to_proto) + ).to eq(hash) + end + end +end