DevGang
Авторизоваться

Создание библиотеки Elixir для проверки орфографии

Вместо того, чтобы напрямую включать мой простой код проверки орфографии в свой проект, почему бы не превратить его в библиотеку, которую мне было бы легче использовать в других местах, а также публиковать публично.

Я знаю, что существуют некоторые другие библиотеки, но ни одна из них не является стандартом, и, поскольку я действительно делаю это в качестве эксперимента, простите меня за то, что я немного заново изобрел велосипед.

Я следую этому официальному руководству по созданию библиотеки.

Создание проекта

Начнем с простого создания новой библиотеки.

$ mix new spell_chex

Я предпочитаю эволюционный и итеративный стиль разработки, поэтому, прежде чем беспокоиться о сложности GenServer в моей окончательной сборке проверки правописания, я создам проект с наивной реализацией (обсуждаемой ранее) и убедитесь, что я могу создать библиотеку, а затем используйте библиотеку в моем хост-приложении.

Давайте будем хорошими гражданами и добавим немного документации:

defmodule SpellChex do
  @moduledoc """
  Module used to invoke SpellChex.
  """
  @moduledoc since: "1.0.0"

  @sample_words ["hello", "world", "elixir", "phoenix", "spell", "check", "dog", "cat"]


  @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
end

Чтобы наши документы могли создаваться, нам нужно добавить зависимость ex_doc к нашему mix.exs.

 defp deps do
    [
      {:ex_doc, "~> 0.31", only: :dev, runtime: false}
    ]

И давайте проверим эти документы. (Подробнее о локальном запуске документов здесь.)

mix deps.get
mix docs
cd doc
caddy file-server --browse --listen :5051

Это должно быть все для наивной реализации. Теперь давайте разберемся, как собрать его локально и использовать в нашем хост-проекте.

Используйте библиотеку локально

В конце концов мы захотим отправить наш локальный код на github и опубликовать его на Hex, но зачем беспокоиться о публикации каждый раз, когда вы хотите протестировать что-то локально?

Первое, что нужно сделать, это обновить хост-проект, чтобы он ссылался на вашу новую библиотеку с опцией path:

 defp deps do
    [
      ...
      {:spell_chex, path: "../spell_chex"},

Снова возьмите свои deps (смешайте deps.get), и теперь вы можете начать использовать библиотеку:

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

Настройте библиотеку

Поскольку библиотека использует GenServer для создания словаря слов, нам необходимо добавить наш словарь при запуске хост-приложения.

Обновите дочерние элементы в lib/<host>/application.ex:

 def start(_type, _args) do

    children = [
      ...
      SpellChex.Dictionary,
      ...
    ]

Теперь вы сможете запустить приложение хост-микса и протестировать его:

iex -S mix
...

iex(1)> SpellChex.exists?("dog")
true
iex(2)> SpellChex.exists?("blahblah")
false
iex(3)> SpellChex.exists?("bonsai")  
true

Публикация через Github

Вы можете просто отправить свою последнюю версию в основную, а затем ссылаться на свою библиотеку из mix.ex хост-приложения, как показано ниже.

{:spell_chex, git: "https://github.com/byronsalty/spell_chex"},

Но вы можете по-прежнему использовать управление версиями. Если да, то вы бы отметили это так:

git tag -a "0.0.1"
git push origin 0.0.1
# or
git push origin --tags

Затем вы можете использовать версию из mix.exs:

 {:spell_chex, git: "https://github.com/byronsalty/spell_chex", tag: "0.0.1"},

Публикация в Hex

Но, возможно, вы хотите сделать свою библиотеку по-настоящему глобальной...

Следуя этому руководству по публикации в Hex:

https://hex.pm/docs/publish

Основные моменты:

  • Убедитесь, что ваши документы построены.
  • Публикуем! mix hex.publish

Теперь вы можете использовать стандартный стиль зависимостей mix.exs:

{:spell_chex, "~> 0.0.1"},

Приятного кодирования!

Если эта статья оказалась для вас полезной, поддержите ее лайком, комментарием или подпиской.

Прочтите больше статей Байрона о лидерстве и искусственном интеллекте.

Статьи о разработке здесь.

Следите за новостями на Medium, Dev.to, Twitter или LinkedIn.

Источник:

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу