lib/verbs.ex

defmodule Verbs do
  #  require ConjugateBe
  #  require ConjugateHave
  #  require ConjugateRegular
  #  require ConjugateIrregular
  ConjugateIrregular
  @doc """
    Example:
    Verb.conjugate("play",
      :tense => "past", :person => "1", :plurality => "singular")
      "play"
  """

  def conjugate(infinitive, options) do
    cond do
      String.match?(infinitive, ~r/[A-Z][a-z]+/) -> conjugate_is_capitalized(infinitive, options)
      String.match?(infinitive, ~r/[A-Z]+/) -> conjugate_allcaps(infinitive, options)
      true -> conjugate_internal(infinitive, options)
    end
  end

  defp conjugate_is_capitalized(infinitive, options) do
    infinitive
    |> String.downcase
    |> conjugate_internal(options)
    |> String.capitalize
  end

  defp conjugate_allcaps(infinitive, options) do
    infinitive
    |> String.downcase
    |> conjugate_internal(options)
    |> String.upcase
  end

  defp conjugate_internal("have", options) do
    ConjugateHave.conjugate(options) end
  defp conjugate_internal("be", options) do
    ConjugateBe.conjugate(options) end

  defp conjugate_internal(infinitive, options) do
    if (ConjugateIrregular.is_irregular?(infinitive)) do
      ConjugateIrregular.conjugate(infinitive, options)
    else
      ConjugateRegular.conjugate(infinitive, options)
    end
  end

end