From bef0d41f0e9038691252adb1989c2f9596fed765 Mon Sep 17 00:00:00 2001 From: Robert Prehn <3952444+prehnRA@users.noreply.github.com> Date: Sat, 24 Feb 2024 10:55:54 -0600 Subject: [PATCH] fix: Fix generated code for embeds --- lib/kindling/embed_template.eex | 2 +- lib/kindling/schema/resource.ex | 18 ++++++++++-------- lib/kindling/template.eex | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/kindling/embed_template.eex b/lib/kindling/embed_template.eex index f4f5e09..015cb03 100644 --- a/lib/kindling/embed_template.eex +++ b/lib/kindling/embed_template.eex @@ -22,7 +22,7 @@ defmodule <%= @namespace %>.<%= @version %>.<%= class_name(@resource_name) %> do <%= for {name, df, _} <- @properties.enum do %>field :<%= Recase.to_snake(name) %>, Ecto.Enum, values: <%= inspect(df["enum"] |> Enum.map(&Recase.to_snake(&1)) |> Enum.map(&String.to_atom/1)) %> <% end %> <%= if @properties.embed_one != [] do %># Embed One<% end %> - <%= for {name, df, _} <- @properties.embed_one do %>embed_one :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %> + <%= for {name, df, _} <- @properties.embeds_one do %>embed_one :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %> <% end %> <%= if @properties.embed_many != [] do %># Embed Many<% end %> <%= for {name, df, _} <- @properties.embed_many do %>embed_many :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %> diff --git a/lib/kindling/schema/resource.ex b/lib/kindling/schema/resource.ex index e592663..74d921c 100644 --- a/lib/kindling/schema/resource.ex +++ b/lib/kindling/schema/resource.ex @@ -47,6 +47,16 @@ defmodule Kindling.Schema.Resource do def property_type(%{"const" => _}), do: :const + for embed <- Config.embedded_resources() do + dbg(embed) + + def property_type(%{"$ref" => "#/definitions/" <> unquote(embed)}), do: :embed_one + + def property_type(%{"items" => %{"$ref" => "#/definitions/" <> unquote(embed)}}) do + :embed_many + end + end + def property_type(%{"$ref" => "#/definitions/" <> name}) do if is_class_name(name) do :has_one @@ -55,14 +65,6 @@ defmodule Kindling.Schema.Resource do end end - for embed <- Config.embedded_resources() do - def property_type(%{"$ref" => "#/definitions/" <> unquote(embed)}), do: :embed_one - - def property_type(%{"items" => %{"$ref" => "#/definitions/" <> unquote(embed)}}) do - :embed_many - end - end - def property_type(%{"items" => %{"$ref" => "#/definitions/" <> name}}) do if is_class_name(name) do :has_many diff --git a/lib/kindling/template.eex b/lib/kindling/template.eex index 061e3fc..7898f29 100644 --- a/lib/kindling/template.eex +++ b/lib/kindling/template.eex @@ -23,10 +23,10 @@ defmodule <%= @namespace %>.<%= @version %>.<%= class_name(@resource_name) %> do <%= for {name, df, _} <- @properties.enum do %>field :<%= Recase.to_snake(name) %>, Ecto.Enum, values: <%= inspect(df["enum"] |> Enum.map(&Recase.to_snake(&1)) |> Enum.map(&String.to_atom/1)) %> <% end %> <%= if @properties.embed_one != [] do %># Embed One<% end %> - <%= for {name, df, _} <- @properties.embed_one do %>embed_one :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %> + <%= for {name, df, _} <- @properties.embed_one do %>embeds_one :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %> <% end %> <%= if @properties.embed_many != [] do %># Embed Many<% end %> - <%= for {name, df, _} <- @properties.embed_many do %>embed_many :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %> + <%= for {name, df, _} <- @properties.embed_many do %>embed_many :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["items"]["$ref"]) %> <% end %> <%= if @properties.has_one != [] do %># Has One<% end %> <%= for {name, df, _} <- @properties.has_one do %>has_one :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %>