lib/spell_chex/dictionary.ex

defmodule SpellChex.Dictionary do
  @moduledoc """
  Module used to create a dictionary of words in a GenServer.

  This module must be started by the host application before it can be used.
  """
  @moduledoc since: "1.0.0"

  use GenServer

  alias SpellChex.FileReader

  @doc """
  Determines if a given `word` is in the list of known words.

  Returns `true` or `false`.

  ## Examples

      iex> SpellChex.exists?("dog")
      true

      iex> SpellChex.exists?("asdfas")
      false

  """
  @doc since: "1.3.0"
  def exists?(word) do
    GenServer.call(__MODULE__, {:check_exists, word})
    # word in @sample_words
  end

  def start_link(_opts \\ []) do
    GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
  end

  @impl true
  def init(_) do
    path =
      :spell_chex
      |> :code.priv_dir()
      |> Path.join("en.txt")

    all_words = FileReader.read_words_from_file(path)
    {:ok, all_words}
  end

  @impl true
  def handle_call({:check_exists, word}, _from, all_words) do
    {:reply, word in all_words, all_words}
  end
end