Skip to content

Commit

Permalink
Add getter with defaults to Tai.Config
Browse files Browse the repository at this point in the history
  • Loading branch information
rupurt committed Aug 31, 2021
1 parent 92e677c commit 9bf37f6
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 9 deletions.
32 changes: 23 additions & 9 deletions apps/tai/lib/tai/config.ex
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ defmodule Tai.Config do
```
"""

@type env :: [{Application.key(), Application.value()}]
@type handler :: module
@type func_name :: atom
@type boot_args :: term
Expand Down Expand Up @@ -84,24 +85,37 @@ defmodule Tai.Config do
]a

@spec parse() :: t
@spec parse([{Application.key(), Application.value()}]) :: t
@spec parse(env) :: t
def parse(env \\ Application.get_all_env(:tai)) do
%Tai.Config{
adapter_timeout: get(env, :adapter_timeout, 10_000),
advisor_groups: get(env, :advisor_groups, %{}),
adapter_timeout: get(env, :adapter_timeout),
advisor_groups: get(env, :advisor_groups),
after_boot: get(env, :after_boot),
after_boot_error: get(env, :after_boot_error),
broadcast_change_set: !!get(env, :broadcast_change_set),
logger: get(env, :logger),
order_workers: get(env, :order_workers, 5),
order_transition_workers: get(env, :order_transition_workers, 5),
order_workers_max_overflow: get(env, :order_workers_max_overflow, 2),
order_workers: get(env, :order_workers),
order_transition_workers: get(env, :order_transition_workers),
order_workers_max_overflow: get(env, :order_workers_max_overflow),
send_orders: !!get(env, :send_orders),
system_bus_registry_partitions:
get(env, :system_bus_registry_partitions, System.schedulers_online()),
system_bus_registry_partitions: get(env, :system_bus_registry_partitions),
venues: get(env, :venues, %{})
}
end

defp get(env, key, default \\ nil), do: Keyword.get(env, key, default)
@spec get(atom) :: term
def get(key), do: get(Application.get_all_env(:tai), key)

@spec get(env, atom) :: term
def get(env, :adapter_timeout = key), do: get(env, key, 10_000)
def get(env, :advisor_groups = key), do: get(env, key, %{})
def get(env, :order_transition_workers = key), do: get(env, key, 5)
def get(env, :order_workers = key), do: get(env, key, 5)
def get(env, :order_workers_max_overflow = key), do: get(env, key, 2)
def get(env, :system_bus_registry_partitions = key), do: get(env, key, System.schedulers_online())
def get(env, :venues = key), do: Keyword.get(env, key, %{})
def get(env, key), do: Keyword.get(env, key)

@spec get(env, atom, term) :: term
def get(env, key, default), do: Keyword.get(env, key, default)
end
34 changes: 34 additions & 0 deletions apps/tai/test/tai/config_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,38 @@ defmodule Tai.ConfigTest do
assert config.venues == :venues
end
end

describe ".get/2" do
test ":adapter_timeout returns a default" do
assert Tai.Config.get([], :adapter_timeout) == 10_000
end

test ":advisor_groups returns a default" do
assert Tai.Config.get([], :advisor_groups) == %{}
end

test ":order_workers returns a default" do
assert Tai.Config.get([], :order_workers) == 5
end

test ":order_transition_workers returns a default" do
assert Tai.Config.get([], :order_transition_workers) == 5
end

test ":order_workers_max_overflow returns a default" do
assert Tai.Config.get([], :order_workers_max_overflow) == 2
end

test ":system_bus_registry_partitions returns a default" do
assert Tai.Config.get([], :system_bus_registry_partitions) == System.schedulers_online()
end

test ":venues returns a default" do
assert Tai.Config.get([], :venues) == %{}
end
end

test ".get/1 uses the tai application env" do
assert Tai.Config.get(:adapter_timeout) == 10_000
end
end

0 comments on commit 9bf37f6

Please sign in to comment.