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 \\ [])Source
Выполняет заданную команду и пересылает её сообщения текущему процессу.
error(message)Source
Пересылает ошибку текущему процессу.
flush(callback \\ fn x -> x end)Source
Очищает все сообщения :mix_shell и :mix_shell_input из текущего процесса.
Если указана функция обратного вызова, она вызывается для каждого полученного сообщения.
Примеры
flush(&IO.inspect/1)
info(message)Source
Пересылает сообщение текущему процессу.
print_app()Source
Печатает текущее приложение, если оно ещё не было напечатано.
prompt(message)Source
Пересылает сообщение текущему процессу.
Также проверяет почтовый ящик на наличие сообщения ввода, соответствующего:
{: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)Source
Пересылает сообщение текущему процессу.
Также проверяет почтовый ящик на наличие сообщения ввода, соответствующего:
{: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.12.0/Mix.Shell.Process.html