Current section
Files
Jump to
Current section
Files
lib/cep.ex
defmodule Viacepex.Cep do
@base_url "https://viacep.com.br/ws/"
@format "json"
def get(cep) do
HTTPoison.get!(@base_url <> "#{cep}/#{@format}/").body
|> Poison.decode!
end
def validate(cep) do
case Regex.match?(~r/^\d{8}$/, cep) do
true ->
:ok
false ->
{:error, [cep: :incorrect_format]}
end
end
def search(state, city, street_name) do
city = URI.encode(city)
street_name = URI.encode(street_name)
HTTPoison.get!(@base_url <> "#{state}/#{city}/#{street_name}/#{@format}/").body
|> Poison.decode!
end
def validate_search(state, city, street_name) do
Keyword.new
|> validate_state(state)
|> validate_city(city)
|> validate_street(street_name)
end
defp validate_state(list, state) do
state_length = String.length(state)
cond do
state_length != 2 ->
Keyword.put(list, :state, :exactly_2_characters)
true ->
list
end
end
defp validate_city(list, city) do
city_length = String.length(city)
cond do
city_length < 3 ->
Keyword.put(list, :city, :at_least_3_characters)
true ->
list
end
end
defp validate_street(list, street_name) do
street_length = String.length(street_name)
cond do
street_length < 3 ->
Keyword.put(list, :street, :at_least_3_characters)
true ->
list
end
end
end