Packages
literature
0.2.13
0.5.1
0.5.0
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
retired
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.32
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A simple CMS / Blog
Current section
Files
Jump to
Current section
Files
lib/literature/redirect.ex
defmodule Literature.Redirect do
@moduledoc """
Literature Redirect Model
"""
use Literature.Web, :model
@available_types [
301,
302
]
schema "literature_redirects" do
field(:from, :string)
field(:to, :string)
field(:type, :integer)
belongs_to(:publication, Publication)
timestamps()
end
@required ~w(
from
to
publication_id
type
)a
def changeset(redirect, params \\ %{}) do
redirect
|> maybe_generate_id()
|> cast(params, @required)
|> validate_inclusion(:type, @available_types)
|> maybe_put_initial_slash(:from)
|> maybe_put_initial_slash(:to)
|> validate_required(@required, message: "This field is required")
|> check_constraint(:from,
name: :from_must_not_be_equal_to_to,
message: "From and To must not be equal"
)
|> unique_constraint(:from, name: :literature_redirects_publication_id_from_to_index)
end
def available_types, do: @available_types
defp maybe_put_initial_slash(changeset, field) do
case get_change(changeset, field) do
nil ->
changeset
"/" <> _value ->
changeset
value ->
put_change(changeset, field, "/" <> value)
end
end
end