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