Packages

A helper library that supports converting form to params and params to form

Current section

8 Versions

Jump to

Compare versions

3 files changed
+42 additions
-12 deletions
  @@ -22,4 +22,4 @@
22 22 {<<"optional">>,false},
23 23 {<<"repository">>,<<"hexpm">>},
24 24 {<<"requirement">>,<<">= 4.0.0">>}]]}.
25 - {<<"version">>,<<"0.3.0">>}.
25 + {<<"version">>,<<"0.3.1">>}.
  @@ -9,6 +9,33 @@ defmodule Doumi.Phoenix.Params do
9 9 end
10 10 end
11 11
12 + @doc """
13 + Converts params to form.
14 + """
15 + @spec to_form(
16 + struct :: %{:__struct__ => atom(), optional(binary()) => any()},
17 + params :: map(),
18 + opts :: keyword()
19 + ) ::
20 + form :: Phoenix.HTML.Form.t()
21 + def to_form(%module{} = struct, params, opts \\ []) when is_struct(struct) and is_map(params) do
22 + {validate, opts} = opts |> Keyword.pop(:validate, true)
23 + {changeset_fun, opts} = opts |> Keyword.pop(:with, &module.changeset/2)
24 +
25 + struct
26 + |> changeset_fun.(params)
27 + |> do_validate(validate)
28 + |> Phoenix.Component.to_form(opts)
29 + end
30 +
31 + @doc """
32 + Converts form or changeset to params(map with string keys).
33 + """
34 + @spec to_params(
35 + form_or_changeset :: Phoenix.HTML.Form.t() | Ecto.Changeset.t(),
36 + more_params :: map()
37 + ) ::
38 + params :: map()
12 39 def to_params(form_or_changeset, more_params \\ %{})
13 40
14 41 def to_params(%Phoenix.HTML.Form{source: %Ecto.Changeset{} = changeset}, more_params) do
  @@ -21,16 +48,11 @@ defmodule Doumi.Phoenix.Params do
21 48 |> Map.merge(more_params)
22 49 end
23 50
24 - def to_form(%module{} = struct, params, opts \\ []) when is_struct(struct) and is_map(params) do
25 - {validate, opts} = opts |> Keyword.pop(:validate, true)
26 - {changeset_fun, opts} = opts |> Keyword.pop(:with, &module.changeset/2)
27 -
28 - struct
29 - |> changeset_fun.(params)
30 - |> do_validate(validate)
31 - |> Phoenix.Component.to_form(opts)
32 - end
33 -
51 + @doc """
52 + Converts form or changeset to map(map with atom keys).
53 + """
54 + @spec to_map(form_or_changeset :: Phoenix.HTML.Form.t() | Ecto.Changeset.t()) ::
55 + map :: map()
34 56 def to_map(%Phoenix.HTML.Form{source: %Ecto.Changeset{} = changeset}) do
35 57 to_map(changeset)
36 58 end
  @@ -61,6 +83,10 @@ defmodule Doumi.Phoenix.Params do
61 83 end)
62 84 end
63 85
86 + defp struct_to_map(list) when is_list(list) do
87 + list |> Enum.map(&struct_to_map/1)
88 + end
89 +
64 90 defp keys_to_string(%{} = atom_key_map) do
65 91 atom_key_map
66 92 |> Enum.map(fn {key, value} ->
  @@ -69,6 +95,10 @@ defmodule Doumi.Phoenix.Params do
69 95 |> Map.new()
70 96 end
71 97
98 + defp keys_to_string(list) when is_list(list) do
99 + list |> Enum.map(&keys_to_string/1)
100 + end
101 +
72 102 defp keys_to_string(value) do
73 103 value
74 104 end
  @@ -2,7 +2,7 @@ defmodule Doumi.Phoenix.Params.MixProject do
2 2 use Mix.Project
3 3
4 4 @source_url "https://github.com/nallwhy/doumi_phoenix_params"
5 - @version "0.3.0"
5 + @version "0.3.1"
6 6
7 7 def project do
8 8 [