Spec-Zone.ru › Elixir 1.11

Mix.Shell.Process

Оболочка Mix, которая использует почтовый ящик текущего процесса для связи.

Этот модуль предоставляет реализацию оболочки Mix, которая использует почтовый ящик текущего процесса для связи вместо ввода-вывода.

Например, при вызове Mix.shell().info("hello"), следующее сообщение будет отправлено вызывающему процессу:

{:mix_shell, :info, ["hello"]}

Это в основном полезно в тестах, позволяя нам утверждать, были ли получены заданные сообщения или нет, вместо выполнения проверок на некоторых захваченных данных ввода-вывода. Поскольку нам нужно гарантировать чистое состояние между тестами, также есть функция flush/1, ответственная за очистку всех :mix_shell связанных сообщений из почтового ящика процесса.

Примеры

Mix.shell().info("hello")

receive do
  {:mix_shell, :info, [msg]} -> msg
end
#=> "hello"

send(self(), {:mix_shell_input, :prompt, "Pretty cool"})
Mix.shell().prompt?("How cool was that?!")
#=> "Pretty cool"

Сводка

Функции

cmd(command, opts \\ [])

Выполняет заданную команду и пересылает её сообщения текущему процессу.

error(message)

Пересылает ошибку текущему процессу.

flush(callback \\ fn x -> x end)

Очищает все :mix_shell и :mix_shell_input сообщения из текущего процесса.

info(message)

Пересылает сообщение текущему процессу.

print_app()

Выводит текущее приложение, если оно ещё не выведено.

prompt(message)

Пересылает сообщение текущему процессу.

yes?(message)

Пересылает сообщение текущему процессу.

Функции

cmd(command, opts \\ [])

Выполняет заданную команду и пересылает её сообщения текущему процессу.

error(message)

Пересылает ошибку текущему процессу.

flush(callback \\ fn x -> x end)

Очищает все :mix_shell и :mix_shell_input сообщения из текущего процесса.

Если задан обратный вызов, он вызывается для каждого полученного сообщения.

Примеры

flush(&IO.inspect/1)

info(message)

Пересылает сообщение текущему процессу.

print_app()

Выводит текущее приложение, если оно ещё не выведено.

prompt(message)

Пересылает сообщение текущему процессу.

Также проверяет почтовый ящик на наличие входного сообщения, соответствующего:

{:mix_shell_input, :prompt, value}

Если такового нет, произойдёт прерывание, так как входных данных оболочки не было. value должен быть строкой.

Примеры

Следующее ответит "Meg" на запрос "What's your name?":

# The response is sent before calling prompt/1 so that prompt/1 can read it
send(self(), {:mix_shell_input, :prompt, "Meg"})
Mix.shell().prompt("What's your name?")

yes?(message)

Пересылает сообщение текущему процессу.

Также проверяет почтовый ящик на наличие входного сообщения, соответствующего:

{:mix_shell_input, :yes?, value}

Если такового нет, произойдёт прерывание, так как входных данных оболочки не было. value должен быть true или false.

Пример

# Send the response to self() first so that yes?/1 will be able to read it
send(self(), {:mix_shell_input, :yes?, true})
Mix.shell().yes?("Are you sure you want to continue?")

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/mix/1.11.2/Mix.Shell.Process.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API