Packages
timber
2.1.4
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/project.ex
defmodule Mix.Tasks.Timber.Install.Project do
@moduledoc false
defstruct [:config_file_path, :endpoint_file_path, :endpoint_module_name, :mix_name,
:module_name, :repo_module_name, :web_file_path]
alias Mix.Tasks.Timber.Install.{FileHelper, IOHelper, PathHelper}
@module_name_regex ~r/defmodule (.*?) do/
def new(api) do
config_file_path = get_config_file_path(api)
endpoint_file_path = get_endpoint_file_path(api)
endpoint_module_name = get_endpoint_module_name(endpoint_file_path)
mix_name = get_mix_name(api)
module_name = Macro.camelize(mix_name)
repo_file_path = get_repo_file_path(api)
repo_module_name = get_repo_module_name(repo_file_path)
web_file_path = get_web_file_path(api)
%__MODULE__{
config_file_path: config_file_path,
endpoint_file_path: endpoint_file_path,
endpoint_module_name: endpoint_module_name,
mix_name: mix_name,
module_name: module_name,
repo_module_name: repo_module_name,
web_file_path: web_file_path
}
end
defp get_mix_name(api) do
case File.cwd() do
{:ok, cwd} ->
cwd
|> Path.split()
|> List.last()
|> String.replace("-", "_")
{:error, _reason} ->
IOHelper.ask("What's the name of your application? (please use snake_case, ex: my_app)",
api)
end
end
defp get_config_file_path(api) do
file_explanation = "We need this to link config/timber.exs"
PathHelper.find(["config", "config.exs"], file_explanation, api)
end
defp get_endpoint_file_path(api) do
if Code.ensure_loaded?(Phoenix) do
file_explanation = "We need this so that we can install the Timber plugs."
PathHelper.find(["{lib,web}", "**", "endpoint.ex"], file_explanation, api,
check_for_umbrella: true, contents_filter: "use Phoenix.Endpoint")
else
nil
end
end
defp get_endpoint_module_name(nil), do: nil
defp get_endpoint_module_name(endpoint_file_path) do
file_contents = FileHelper.read!(endpoint_file_path)
get_module_name(file_contents)
end
defp get_repo_file_path(api) do
if Code.ensure_loaded?(Ecto) do
file_explanation = "We need this to determine the module name of your Repo module"
PathHelper.find(["{lib,web}", "**", "repo.ex"], file_explanation, api,
check_for_umbrella: true, contents_filter: "use Ecto.Repo")
else
nil
end
end
defp get_repo_module_name(nil), do: nil
defp get_repo_module_name(repo_file_path) do
file_contents = FileHelper.read!(repo_file_path)
get_module_name(file_contents)
end
defp get_web_file_path(api) do
if Code.ensure_loaded?(Phoenix) do
file_explanation = "We need this to disable the default Phoenix controller logging"
PathHelper.find(["web", "web.ex"], file_explanation, api, check_for_umbrella: true,
contents_filter: "use Phoenix.Controller")
else
nil
end
end
defp get_module_name(file_contents) do
case Regex.run(@module_name_regex, file_contents) do
[_contents, module_name] -> module_name
_ -> nil
end
end
end