Current section

Files

Jump to
sorcery lib services schema generation generation.ex
Raw

lib/services/schema/generation/generation.ex

defmodule Sorcery.Schema.Generation do
@moduledoc false
def gen(full_fields, body \\ %{}) do
id = case body do
%{id: id} -> StreamData.constant(id)
_ -> StreamData.positive_integer()
end
sd_map = Enum.reduce(full_fields, %{id: id}, fn {k, v}, acc ->
sd_field = if Map.has_key?(body, k) do
StreamData.constant(body[k])
else
v.__struct__.get_sd_field(v)
end
Map.put(acc, k, sd_field)
end)
StreamData.fixed_map(sd_map)
end
# @TODO
def gen_re(full_fields, n) do
#ids = 1..n
#fk_fields = Enum.reduce(full_fields, [], fn {k, %{t: t}}, acc -> if t == :fk, do: [t | acc], else: acc end)
#other_fields = Enum.reduce(full_fields, [], fn {k, %{t: t}}, acc -> if t != :fk, do: [k | acc], else: acc end)
gen(full_fields) |> Enum.take(n)
end
end