Current section
Files
Jump to
Current section
Files
lib/intercom/segment.ex
defmodule Intercom.Segment do
@moduledoc false
use Ecto.Schema
import Ecto.Changeset
alias Intercom.{HTTP, Request}
alias __MODULE__
@path "/segments"
@required_fields ~w(id)a
@optional_fields ~w(type name created_at updated_at person_type count)a
@primary_key false
embedded_schema do
field :name, :string
field :id, :string
field :type, :string
field :created_at, :integer
field :updated_at, :integer
field :person_type, :string
field :count, :integer
end
@type t :: %__MODULE__{}
@typep result :: {:ok, Segment.t} | {:error, any}
@doc """
Fetches a segment by its Intercom ID.
"""
@spec get(String.t) :: result
def get(id) when is_binary(id) do
"#{@path}/#{id}"
|> Request.build
|> HTTP.get
|> case do
{:ok, map} -> parse(map)
{:error, _} = err -> err
end
end
@doc false
@spec changeset(Segment.t, map) :: Ecto.Changeset.t
def changeset(%Segment{} = location, %{} = changes) do
location
|> cast(changes, @required_fields ++ @optional_fields)
|> validate_required(@required_fields)
end
@doc false
@spec parse(map) :: result
def parse(%{} = segment) do
case changeset(%Segment{}, segment) do
%Ecto.Changeset{valid?: true} = changes ->
{:ok, apply_changes(changes)}
%Ecto.Changeset{valid?: false} = changes ->
{:error, changes}
end
end
end