Packages
excoveralls
0.9.2
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.2
0.11.1
0.11.0
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
Coverage report tool for Elixir with coveralls.io integration.
Current section
Files
Jump to
Current section
Files
lib/excoveralls/settings.ex
defmodule ExCoveralls.Settings do
@moduledoc """
Handles the configuration setting defined in json file.
"""
defmodule Files do
@filename "coveralls.json"
def default_file, do: "#{Path.dirname(__ENV__.file)}/../conf/#{@filename}"
def custom_file, do: "#{System.cwd}/#{@filename}"
def dot_file, do: Path.expand("~/.excoveralls/#{@filename}")
end
@doc """
Get stop words from the json file.
The words are taken as regular expression.
"""
def get_stop_words do
read_config("default_stop_words", []) ++ read_config("custom_stop_words", [])
|> Enum.map(&Regex.compile!/1)
end
@doc """
Get coverage options from the json file.
"""
def get_coverage_options do
read_config("coverage_options", []) |> Enum.into(Map.new)
end
@doc """
Get default coverage value for lines marked as not relevant.
"""
def default_coverage_value do
case Map.fetch(get_coverage_options(), "treat_no_relevant_lines_as_covered") do
{:ok, true} -> 100.0
_ -> 0.0
end
end
@doc """
Get terminal output options from the json file.
"""
def get_terminal_options do
read_config("terminal_options", []) |> Enum.into(Map.new)
end
@doc """
Get column width to use for the report from the json file
"""
def get_file_col_width do
case Map.fetch(get_terminal_options(), "file_column_width") do
{:ok, val} when is_binary(val) ->
case Integer.parse(val) do
:error -> 40
{int, _} -> int
end
{:ok, val} when is_integer(val) -> val
_ -> 40
end
end
defp read_config_file(file_name) do
if File.exists?(file_name) do
case File.read!(file_name) |> Jason.decode do
{:ok, config} -> config
_ -> raise "Failed to parse config file as JSON : #{file_name}"
end
else
Map.new
end
end
@doc """
Get skip files from the json file.
"""
def get_skip_files do
read_config("skip_files", [])
|> Enum.map(&Regex.compile!/1)
end
@doc """
Reads the value for the specified key defined in the json file.
"""
def read_config(key, default \\ nil) do
case (read_merged_config(Files.dot_file, Files.custom_file) |> Map.get(key)) do
nil -> read_config_file(Files.default_file()) |> Map.get(key, default)
config -> config
end
end
defp read_merged_config(dot, custom) do
dot_config = read_config_file(dot)
project_config = read_config_file(custom)
merge(dot_config, project_config)
end
defp merge(left, right) when is_map(left) and is_map(right) do
keys = Map.keys(left) ++ Map.keys(right)
Enum.reduce(keys, %{}, fn k, new_map ->
merged = cond do
Map.has_key?(left, k) and Map.has_key?(right, k) -> merge(Map.get(left, k), Map.get(right, k))
Map.has_key?(left, k) == false and Map.has_key?(right, k) -> Map.get(right, k)
Map.has_key?(left, k) and Map.has_key?(right, k) == false -> Map.get(left, k)
true -> %{}
end
Map.put(new_map, k, merged)
end)
end
defp merge(left, right) when is_list(left) and is_list(right), do: Enum.uniq(left ++ right)
defp merge(_left, right), do: right
end