Skip to content

Commit 5fe9b71

Browse files
rewrittenStrech
andauthored
Allow encode/2 to receive opts in any order (#112)
--------- Co-authored-by: Sergey Fedorov <oni.strech@gmail.com>
1 parent 7b07200 commit 5fe9b71

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

lib/avrora/encoder.ex

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ defmodule Avrora.Encoder do
105105
end
106106
end
107107

108+
def encode(payload, schema_name: schema_name) when is_map(payload),
109+
do: encode(payload, schema_name: schema_name, format: :guess)
110+
111+
def encode(payload, format: format, schema_name: schema_name) when is_map(payload),
112+
do: encode(payload, schema_name: schema_name, format: format)
113+
108114
@doc """
109115
Encode message map in Avro format, loading schema from local file or Schema Registry.
110116
@@ -128,9 +134,6 @@ defmodule Avrora.Encoder do
128134
"""
129135
@spec encode(map(), schema_name: String.t(), format: :guess | :registry | :ocf | :plain) ::
130136
{:ok, binary()} | {:error, term()}
131-
def encode(payload, schema_name: schema_name) when is_map(payload),
132-
do: encode(payload, schema_name: schema_name, format: :guess)
133-
134137
def encode(payload, schema_name: schema_name, format: format) when is_map(payload) do
135138
with {:ok, schema_name} <- Name.parse(schema_name) do
136139
if format == :plain do

test/avrora/encoder_test.exs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,42 @@ defmodule Avrora.EncoderTest do
625625

626626
assert encoded == messenger_plain_message()
627627
end
628+
629+
test "when `format` passed before `schema_name` option it accepts the order" do
630+
messenger_schema = messenger_schema()
631+
632+
Avrora.Storage.MemoryMock
633+
|> expect(:get, fn key ->
634+
assert key == "io.confluent.Messenger"
635+
636+
{:ok, nil}
637+
end)
638+
|> expect(:put, fn key, value ->
639+
assert key == "io.confluent.Messenger"
640+
assert value == messenger_schema
641+
642+
{:ok, value}
643+
end)
644+
645+
Avrora.Storage.RegistryMock
646+
|> expect(:put, fn key, value ->
647+
assert key == "io.confluent.Messenger"
648+
assert value == messenger_json_schema_with_local_reference()
649+
650+
{:error, :unconfigured_registry_url}
651+
end)
652+
653+
Avrora.Storage.FileMock
654+
|> expect(:get, fn key ->
655+
assert key == "io.confluent.Messenger"
656+
657+
{:ok, messenger_schema}
658+
end)
659+
660+
{:ok, encoded} = Encoder.encode(messenger_payload(), format: :plain, schema_name: "io.confluent.Messenger")
661+
662+
assert encoded == messenger_plain_message()
663+
end
628664
end
629665

630666
describe "encode_plain/2" do

0 commit comments

Comments
 (0)