defmodule Ranwords do @moduledoc """ Generates random words with their meaning and pronunciation. """ @doc """ Easily generate random words. ## Examples iex> Randwords.generate [ %{ "definition" => "Bent like a knee; jointed ", "pronunciation" => "Jenikulate", "word" => "Geniculate" } ] """ @base_url "https://random-words-api.vercel.app/word" @doc """ Fetching the API and return the body with cases Once we run into an error, we return it from the Error module """ def fetchData do case Ranwords.Base.get!("#{@base_url}") do %HTTPoison.Response{body: body, status_code: 200} -> Poison.decode!(body) %HTTPoison.Response{status_code: status_code} when status_code > 399 -> IO.inspect(status_code, label: "STATUS_CODE") :error _ -> raise Ranwords.Error end end @doc """ Format down the data to be more readable """ def map_from_list(list) do list |> List.first() end @doc """ Helper functions so output is formatted well """ def get_meaning_format() do list = Ranwords.fetchData() map = map_from_list(list) map["word"] <> " | " <> map["definition"] end def get_pronunciation_format() do list = Ranwords.fetchData() map = map_from_list(list) map["word"] <> " | " <> map["pronunciation"] end @doc """ Returns the whole data (word, meaning, pronunciation) """ def randomWordAll do Ranwords.fetchData end @doc """ Returns the meaning of the word """ def randomWordMeaning do get_meaning_format() end @doc """ Returns the pronunciation """ def randomWordPronunciation do get_pronunciation_format() end end