code-corps/code-corps-api

View on GitHub
lib/code_corps/model/slugged_route.ex

Summary

Maintainability
Test Coverage
defmodule CodeCorps.SluggedRoute do
  @moduledoc """
  A slugged route is used for routing slugged requests like `/joshsmith` or
  `/code-corps` to their respective owner: either a user or an organization.
  """

  use CodeCorps.Model

  import CodeCorps.Helpers.Slug
  import CodeCorps.Validators.SlugValidator

  @type t :: %__MODULE__{}

  schema "slugged_routes" do
    belongs_to :organization, CodeCorps.Organization
    belongs_to :user, CodeCorps.User

    field :slug, :string

    timestamps()
  end

  @doc """
  Builds a changeset based on the `struct` and `params`.
  """
  def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:slug])
    |> validate_required(:slug)
    |> validate_slug(:slug)
  end

  def create_changeset(struct, params) do
    struct
    |> changeset(params)
    |> generate_slug(:slug, :slug)
  end
end