defmodule People.Person do
defstruct first_name: nil,
last_name: nil,
birthday: nil,
location: "home"
def full_name(%__MODULE__{} = person) do
"#{person.first_name} #{person.last_name}"
end
def age(%__MODULE__{} = person) do
days = Date.diff(Date.utc_today(), person.birthday)
days / 365.25
end
def toggle_location(%__MODULE__{location: "away"} = person) do
person |> set_location("home")
end
def toggle_location(%__MODULE__{location: "home"} = person) do
person |> set_location("away")
end
defp set_location(%__MODULE__{} = person, location) do
%{person | location: location}
end
defimpl Inspect do
def inspect(
%{
first_name: first_name,
last_name: last_name,
location: location
},
_
) do
"Person[#{first_name} #{last_name}, #{location}]"
end
end
end