Skip to content

Commit 9d9b55f

Browse files
committed
convert list type to list
1 parent 6287366 commit 9d9b55f

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed

lib/sentry/config.ex

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
defmodule Sentry.Config do
22
@moduledoc """
33
This module provides the functionality for fetching configuration settings and their defaults.
4+
5+
Sentry supports loading config at runtime, via `{:system, SYSTEM_ENV_KEY}` tuples, where Sentry will read `SYSTEM_ENV_KEY` to get the config value from the system environment at runtime.
46
"""
57

68
@default_included_environments [:dev, :test, :prod]
@@ -19,8 +21,11 @@ defmodule Sentry.Config do
1921
get_config(:dsn, check_dsn: false)
2022
end
2123

24+
@doc """
25+
The `:included_environments` config key expects a list, but if given a string, it will split the string on commas to create a list.
26+
"""
2227
def included_environments do
23-
get_config(:included_environments, default: @default_included_environments, check_dsn: false)
28+
get_config(:included_environments, default: @default_included_environments, check_dsn: false, type: :list)
2429
end
2530

2631
def environment_name do
@@ -108,6 +113,7 @@ defmodule Sentry.Config do
108113
defp get_config(key, opts \\ []) when is_atom(key) do
109114
default = Keyword.get(opts, :default)
110115
check_dsn = Keyword.get(opts, :check_dsn, true)
116+
type = Keyword.get(opts, :type)
111117

112118
environment_result = case get_from_application_environment(key) do
113119
{:ok, value} -> {:ok, value}
@@ -120,11 +126,15 @@ defmodule Sentry.Config do
120126
end
121127

122128
case result do
123-
{:ok, value} -> value
129+
{:ok, value} -> convert_type(value, type)
124130
:not_found -> default
125131
end
126132
end
127133

134+
defp convert_type(value, nil), do: value
135+
defp convert_type(value, :list) when is_list(value), do: value
136+
defp convert_type(value, :list) when is_binary(value), do: String.split(value, ",")
137+
128138
defp get_from_application_environment(key) when is_atom(key) do
129139
case Application.fetch_env(:sentry, key) do
130140
{:ok, {:system, env_var}} -> get_from_system_environment(env_var)

test/config_test.exs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,17 @@ defmodule Sentry.ConfigTest do
3737
refute "test" == Config.source_code_path_pattern()
3838
end
3939
end
40+
41+
describe "included_environments" do
42+
test "retrieves and converts string from system environment" do
43+
delete_env(:sentry, [:included_environments])
44+
modify_system_env(%{"SENTRY_INCLUDED_ENVIRONMENTS" => "test,dev"})
45+
assert ["test", "dev"] == Config.included_environments()
46+
end
47+
48+
test "retrieves and converts string from config" do
49+
modify_env(:sentry, included_environments: "test,dev")
50+
assert ["test", "dev"] == Config.included_environments()
51+
end
52+
end
4053
end

test/support/test_environment_helper.exs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,21 @@ defmodule Sentry.TestEnvironmentHelper do
1414
end)
1515
end
1616

17+
def delete_env(app, deletes) do
18+
original_env = Application.get_all_env(app)
19+
Enum.each(deletes, fn key -> Application.delete_env(app, key) end)
20+
21+
ExUnit.Callbacks.on_exit(fn ->
22+
Enum.each deletes, fn key ->
23+
if Keyword.has_key?(original_env, key) do
24+
Application.put_env(app, key, Keyword.fetch!(original_env, key))
25+
else
26+
Application.delete_env(app, key)
27+
end
28+
end
29+
end)
30+
end
31+
1732
def modify_system_env(overrides) when is_map(overrides) do
1833
original_env = System.get_env()
1934
System.put_env(overrides)

0 commit comments

Comments
 (0)