Current section
8 Versions
Jump to
Current section
8 Versions
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 | [ |