Spec-Zone.ru › Elixir 1.12

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

Spec-Zone.ru

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