Packages
timber
2.5.2
3.1.2
3.1.1
3.1.0
3.0.0
3.0.0-alpha.3
3.0.0-alpha.2
3.0.0-alpha.1
2.8.4
2.8.3
2.8.2
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.1
2.3.0
2.2.1
2.2.0
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
2.0.0-rc7
2.0.0-rc6
2.0.0-rc5
2.0.0-rc4
2.0.0-rc3
2.0.0-rc2
2.0.0-rc1
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
🌲 Great Elixir Logging Made Easy. Official Timber.io Integration.
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/timber/install/path_helper.ex
defmodule Mix.Tasks.Timber.Install.PathHelper do
@moduledoc false
alias Mix.Tasks.Timber.Install.{API, Config, FileHelper, IOHelper}
# Ensures that the specified file exists. If it does not, it prompts
# the user to enter the file path.
def find(path_parts, file_explanation, api, opts \\ []) when is_list(path_parts) do
# Check to see if we're in an umbrella app
path_parts =
if Keyword.get(opts, :check_for_umbrella) do
if FileHelper.dir?("apps") do
["apps", "**"] ++ path_parts
else
path_parts
end
else
path_parts
end
path = Config.path_client().join(path_parts)
file_name = Enum.at(path_parts, -1)
missing_file_prompt_message =
"""
If you prefer, you can skip this and manually install later following
these instructions: https://timber.io/docs/elixir/installation/manual-installation/
Please enter the correct relative path for the '#{IOHelper.colorize(file_name, :blue)}' file (or type 'skip' to skip)
"""
case Config.path_client().wildcard(path) do
[] ->
API.event!(api, :file_not_found, %{path: path})
prompt =
"""
#{IOHelper.colorize("We couldn't find a '#{file_name}' file.", :yellow)}
#{file_explanation}
#{missing_file_prompt_message}
"""
|> String.trim_trailing()
case IOHelper.ask(prompt, api) do
"skip" -> nil
v -> find([v], file_explanation, api)
end
[file_path] ->
API.event!(api, :file_found, %{path: path})
file_path
file_paths ->
contents_filter = Keyword.get(opts, :contents_filter)
file_paths =
if contents_filter do
Enum.filter(file_paths, fn file_path ->
contents = FileHelper.read!(file_path)
String.contains?(contents, contents_filter)
end)
else
file_paths
end
case file_paths do
[file_path] -> file_path
file_paths ->
API.event!(api, :multiple_files_found, %{path: path})
file_paths_list = Enum.join(file_paths, "\n")
prompt =
"""
#{IOHelper.colorize("Whoa! We found multiple #{file_name} files:", :yellow)}
#{IOHelper.colorize(file_paths_list, :blue)}
#{file_explanation}
#{missing_file_prompt_message}
"""
|> String.trim_trailing()
case IOHelper.ask(prompt, api) do
v -> find([v], file_explanation, api)
end
end
end
end
end