Current section
Files
Jump to
Current section
Files
lib/hi.ex
defmodule Hi do
@moduledoc """
A blazingly fast Elixir library to say "Hi" to your mom.
"""
alias Languages
@doc """
Say "Hi" to your mom.
## Examples
iex> Hi.mom()
"Hi, mom!"
"""
def mom() do
Languages.get(:en)
|> remove_brackets
end
@doc """
Say "Hi" to your mom in the default language.
Default language: `:en`.
## Parameters
- `name`: String that represents the mom's name
## Examples
iex> Hi.mom("Kate")
"Hi, Kate!"
"""
def mom(name), do: mom(name, :en)
@doc """
Say "Hi" to your mom in an especific language.
## Parameters
- `name`: String that represents the mom's name
- `language`: Atom representing the language specified
## Examples
iex> Hi.mom(nil, :pt)
"Oi, mãe!"
iex> Hi.mom("Maria", :pt)
"Oi, Maria!"
iex> Hi.mom("Esmeralda", :es)
"Hola, Esmeralda!"
"""
def mom(name, language) do
grettings = Languages.get(language)
case name do
name when is_nil(name) -> grettings |> remove_brackets
name when is_binary(name) -> grettings |> inject(name)
_ -> mom()
end
end
@doc false
defp inject(greeting, name) do
greeting
|> String.replace(~r/\{{2}([^}]+)\}{2}/, name)
end
@doc false
defp remove_brackets(greeting) do
greeting
|> String.replace(~r/[{}]{2}/, "")
end
end